在写程序时,常常遇到断点的问题,可以说,绝大部分的断点问题都是内存访问出错导致的。
今天我想说的是关于申请堆内存时所存在的断点问题。
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)),定义一个整型来获取内存。这种写法是绝对错误的,等号右边是一段内存空间,也即一段地址,等号左边是整型变量,无疑,类型不匹配,而地址用什么来存储呢?对,指针。