gpt4 book ai didi

c - 系统小程序 : Assertion

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:27 26 4
gpt4 key购买 nike

main: malloc.c:2405: sysmalloc: Assertion `(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.

当试图生成一个用户只能添加到头部或尾部的双向链表时,我最终在顶部得到了可爱的流产消息。

我已经使用 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 调用传递了错误的大小:

D = malloc(sizeof(data*));  // allocate memory for a single pointer

应该是:

D = malloc(sizeof(data));  // allocate memory for a whole struct

但实际上,

D = malloc(sizeof *D);  // allocate memory for whatever D points to

是最好的,因为这样您就不需要查看 D 的声明来检查此行是否正确。

关于c - 系统小程序 : Assertion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46803671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com