用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的内容,它的编号正确
答案 0 :(得分:6)
断言告诉您堆内部数据结构已损坏,可能是由于您在某个时刻在分配块的边界之外写入。尝试使用valgrind运行,看看它是否可以告诉您哪里出错了。
答案 1 :(得分:3)
可能存在任何问题,例如:
n_tot
的值可能是垃圾。
您已在已分配的块之外编写,并且这样做会破坏用于维护堆的数据结构。