主:malloc.c:2405:SYSMALLOC:断言`(old_top == initial_top(AV)& & old_size == 0)|| ((unsigned long)(old_size)> = MINSIZE & & prev_inuse(old_top)& &((unsigned long)old_end &(pagesize - 1))== 0)'failed。SYSMALLOC:断言
当试图产生一个双向链表,用户可以只添加到头部或尾部,我最终得到可爱的流产消息在顶部。
我已经使用gdb将其缩小到它造成这种情况的功能,但我真的不知道我在做什么错误。它分配第一个节点,然后,它会抛出错误。
的功能如下:
data* initD(){
data *D = NULL;
D = malloc(sizeof(data*));
if (!D){
printf("Error in allocation of data\n");
exit(0);
}
D->head = NULL;
D->tail = NULL;
D->next = NULL;
D->prev = NULL;
D->val = -1;
return D;
}
'malloc(sizeof(data *))'?如果'sizeof(data)!= sizeof(data *)'(这看起来很可能考虑你以后的任务)呢? –
为什么不是?它只是一个指向内存中某个地方的指针。数据是一个在头文件中定义的结构,所以我不明白它不可能是数据的大小* – Ohunter
@Ohunter指针的大小是固定的。但是你的结构可能会比指针的大小更大。任何类型的指针的大小都是相同的。 –