C动态分配内存malloc,calloc报错

新手上路,请多包涵

我在某个循环中多次调用如下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;
}

错误
clipboard.png

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);
阅读 5.5k
1 个回答

你的调用过程是不是这样的?:
pnt = ipoint2(...);
根据你的实现,函数内分配的内存必须有相应的变量接收

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进