C语言中申请堆内存断点及其他常见问题

在写程序时,常常遇到断点的问题,可以说,绝大部分的断点问题都是内存访问出错导致的。

今天我想说的是关于申请堆内存时所存在的断点问题。

C语言中,使用malloc()函数申请内存,常常配合使用的是sizeof()函数,申请内存使用完毕后通过free()函数释放掉申请的内存。其中malloc()函数返回值是void,申请内存时常常使用强制类型转化将之赋值,例:int *p = (int*)malloc(sizeof(int)).

简单介绍完毕,说到了重点,就是内存访问出错的问题。

如果将上述引例稍作修改,结果如何?

例,int *p = (int*)malloc(sizeof(int*)),结果就会出现断点,断点原因就是内存访问越界,为什么呢?还是基础知识掌握不牢,int *和int类型是两种不同的类型,其内存占用不同,通常情况下,指针占用内存很小,所以申请指针内存,存入其他数据类型就会断点,即内存访问越界。

又例,int p = (int*)malloc(sizeof(int)),定义一个整型来获取内存。这种写法是绝对错误的,等号右边是一段内存空间,也即一段地址,等号左边是整型变量,无疑,类型不匹配,而地址用什么来存储呢?对,指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值