关于malloc/calloc调用的奇怪SIGABORT

the*_*man 1 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)> =(unsigned long)(((__ 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,已中止.__kernel_vsyscall()中的0xb7fe1424

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

problem->y0 = (double *)calloc(n_tot, sizeof(double));
Run Code Online (Sandbox Code Playgroud)

问题是具有double*y0作为成员的结构.

以前在函数中,我这样做

problem = (fem_problem *)calloc(1, sizeof(fem_problem));
Run Code Online (Sandbox Code Playgroud)

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

一些建议?

加:

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

Chr*_*odd 6

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