我的函数如下:
void Insert_ldb(int t){
struct node_ldb *temp_ldb1,*lastnode_ldb;
temp_ldb1=root_ldb[t];
while(temp_ldb1->next!=NULL)
temp_ldb1=temp_ldb1->next;
if(temp_ldb1->next==NULL){
lastnode_ldb=malloc(sizeof(*lastnode_ldb));//error appears at this line
temp_ldb1->next=lastnode_ldb;
}
}
结构体 node_ldb 定义为:
struct node_ldb{
int sno;
int *lvar;
int *object;
struct node_ldb *next;
};
编译时没有出现错误,但执行时终止并显示消息:
malloc.c:3096: sYSMALLOc: Assertion
(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)
failed. Aborted
奇怪的是同一个函数在终止之前成功执行了很多次。那么错误是否可能发生在其他地方?因为即使是 valgrind 也不会显示任何错误。可能是什么问题?
最佳答案
这闻起来很像是在调用 malloc()
之前发生了内存管理损坏。
损坏的内存管理数据导致对 malloc()
的调用失败。
我强烈建议使用内存检查器(例如 Valgrind)运行该程序,直到重现故障。
关于c - malloc.c :3096: SYSMALLOC: Assertion failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18673605/