在C程序中使用了malloc分配的内存,出现经常性程序跑死或数据异常的问题。
x64的PC机,使用mingw32 (gcc 5.3.0)编译
before:
int *parray[512]; //保存申请空间的地址
...
parray[0]=malloc(N); //需要存储N个数字
/* test print */
for (int i = 0; i < N; i++)
{
printf("%d ", parray[0][i]); //后续使用该数字经常出现问题
}
经查阅,malloc函数原型为
*extern void malloc(unsigned int num_bytes);
参数为申请空间大小,该大小是以字节Byte为单位的!!
而在使用时,如果类型不是char 类型或uint8_t等8位数据类型,则在申请时一定要乘以数据大小的倍数,sizeof( [the type] )。
after:
int *parray[512]; //保存申请空间的地址
...
parray[0]=malloc(N*sizeof(int)); //申请空间大小改成 数量X单元大小
//或者使用calloc函数,
//parray[0]=(int *)calloc(N,sizeof(int));
修改完成后,没有出现先前的问题,之前应该就是申请空间不足,导致数据超出申请大小,程序就使用了管理范围之外的内存,引发未知情况。
以后使用malloc时,可以写成 malloc( [len] * [item_size] );