我的功能如下:
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: 断言
(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)
失败。中止
奇怪的是,相同的函数在终止之前多次成功执行。那么错误是否可能发生在其他地方?因为即使 valgrind 也没有显示任何错误。可能是什么问题呢?