关于malloc / calloc调用的奇怪SIGABORT

时间:2011-04-04 15:22:22

标签: c dynamic-allocation

用gdb运行我的程序我得到了这个:

  

fem.o:malloc.c:3096:sYSMALLOc:   断言`(old_top ==(((mbinptr)   (((char *)&((av) - > bins [((1) - 1)*   2])) - __builtin_offsetof(struct   malloc_chunk,fd))))&& old_size == 0)   || ((unsigned long)(old_size)> =   (无符号长)(((__ builtin_offsetof   (struct malloc_chunk,   fd_nextsize))+((2 *(sizeof(size_t)))    - 1))& 〜((2 *(sizeof(size_t))) - 1)))&& ((old_top) - > size& 0x1)&&   ((unsigned long)old_end& pagemask)==   0)'失败。

     

收到信号SIGABRT,   中止。 0xb7fe1424 in   __kernel_vsyscall()

我发现在此代码之后出现此错误:

problem->y0 = (double *)calloc(n_tot, sizeof(double));

问题是一个双* y0作为成员的结构。

以前在函数中,我这样做

problem = (fem_problem *)calloc(1, sizeof(fem_problem));

我没有得到任何错误问题== NULL。

一些建议?

ADD:

我已经检查了n_tot的内容,它的编号正确

2 个答案:

答案 0 :(得分:6)

断言告诉您堆内部数据结构已损坏,可能是由于您在某个时刻在分配块的边界之外写入。尝试使用valgrind运行,看看它是否可以告诉您哪里出错了。

答案 1 :(得分:3)

可能存在任何问题,例如:

  • n_tot的值可能是垃圾。

  • 您已在已分配的块之外编写,并且这样做会破坏用于维护堆的数据结构。