我在某个循环中多次调用如下ipoint2函数,几十次循环之后在11行calloc处出错。
代码
matrix_t* ipoint2(int x,int y,matrix_t* pnt){
if(likely(NULL!=pnt)){
pnt->int_data[0]=x;
pnt->int_data[1]=y;
}else{
pnt=(matrix_t*)calloc(1,sizeof(matrix_t));
pnt->type=int_type;
pnt->size[0]=1;
pnt->size[1]=2;
printf("1 addr %x %x\n",pnt,pnt->int_data);
pnt->int_data=(int*)calloc(2,sizeof(int));
printf("2 addr %x %x\n",pnt,pnt->int_data);
pnt->int_data[0]=x;
pnt->int_data[1]=y;
}
return pnt;
}
错误
ubuntu14.04,gcc4.84。发现calloc会报错我是震惊的。。请问这可能是什么原因呢?
我检查了代码,该释放的内存我应该都free了,而且也不存在内存不够的情况。更百思不得其解的是,我发现这个现象,如果在该句之前随便分配一点内存、不回收(会造成一点泄露),程序就能正常执行完。。。。。比如:
printf("1 addr %x %x\n",pnt,pnt->int_data);
int* n=(int*)malloc(2*sizeof(int));
pnt->int_data=(int*)calloc(2,sizeof(int));
printf("2 addr %x %x\n",pnt,pnt->int_data);
你的调用过程是不是这样的?:
pnt = ipoint2(...);
根据你的实现,函数内分配的内存必须有相应的变量接收