malloc/calloc调用上的奇怪SIGABORT
使用gdb运行我的程序,我得到以下结果: fem.o:malloc.c:3096:sYSMALLOc: 断言`(old_top==((mbinptr) (((char*)和((av)->垃圾箱[((1)-1)* 2] )-(结构)的内置偏移量 malloc_chunk,fd))&&old_size==0) ||((无符号长)(旧尺寸)>= (无符号长)(内置偏移量) (结构malloc_chunk, fd_nextsize))+((2*(sizeof(size_t))) -1)&((2*(sizeof(size_t))-1)&((old_top)->size&0x1)&& ((无符号长)旧的结尾和页面掩码)== “0)”失败 程序接收信号SIGABRT, 流产了。0xb7fe1424英寸 __内核调用() 我发现此错误出现在以下代码之后:malloc/calloc调用上的奇怪SIGABORT,c,dynamic-allocation,C,Dynamic Allocation,使用gdb运行我的程序,我得到以下结果: fem.o:malloc.c:3096:sYSMALLOc: 断言`(old_top==((mbinptr) (((char*)和((av)->垃圾箱[((1)-1)* 2] )-(结构)的内置偏移量 malloc_chunk,fd))&&old_size==0) ||((无符号长)(旧尺寸)>= (无符号长)(内置偏移量) (结构malloc_chunk, fd_nextsize))+((2*(sizeof(size_t))) -1)&((2*(siz
problem->y0 = (double *)calloc(n_tot, sizeof(double));
问题是一个具有双*y0作为成员的结构
在前面的函数中,我这样做
problem = (fem_problem *)calloc(1, sizeof(fem_problem));
我没有得到任何错误,也没有问题==NULL
有什么建议吗
加:
我已经检查了n_tot的内容,它的编号正确可能有很多问题,例如:
的值可能是垃圾n_tot
- 您已经在分配的块之外进行了写入,这样做会破坏用于维护堆的数据结构
{}
按钮)格式化代码。提交前预览问题。在calloc调用前检查n_tot,它包含正确的号码。我不理解第二点:(如果您分配了,比如说,100个字节,并且您写入的位置从一开始就有150个字节(或者在它前面,但可能性较小),那么您可能已经覆盖了用于其他事情的数据。