gpt4 book ai didi

c - 无缘无故地在 c 中出现 SYSMALLOC 错误

转载 作者:行者123 更新时间:2023-11-30 18:31:28 25 4
gpt4 key购买 nike

我在 C 程序上收到一条 SYSMALLOc 错误消息,我相信此错误消息与我使用过的 malloc 相关,而且我通过在 malloc 周围放置 printf 语句发现了这一点,并且它导致了问题。我看不出有什么问题。有什么解决办法吗?请帮忙,代码如下。而且,它运行一段时间还不错,然后就坏了。并显示错误消息,如下所示。

program: 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

node * new(char c)
{
NODE *node = (NODE *)malloc(sizeof(NODE));

node->c = c;

return node;
}

编辑:我刚刚发现以下代码可能是导致错误发生的原因。谁能看出其中有什么问题吗?

void move(char *string)
{
int length = strlen(string);
node->s = (char *)malloc(length*sizeof(char));

strcpy(node->s, string);
}

该函数将字符串参数复制到node->s

最佳答案

node * new(char c) {   
NODE *node = malloc(sizeof(NODE));
if(node) {
node->c = c;
}
return node;
}

您的上述代码是正确的。但问题是您假设以下行导致问题,因为执行此行之前的一些 printf 语句。这是不正确的。

上面的错误消息表明您的程序的先前逻辑(在其他地方)已经损坏了堆内存。此异常/错误消息是刚刚生效的,而不是真正的问题。您应该尝试在 Linux 上使用一些动态工具(Valgrind),在 Windows 上使用 WinDBG/PageHeap 来确定程序中内存损坏的根本原因。

编辑您可能想查看我之前关于如何使用 Valgrind 和 GDB 调试程序的文章:https://stackoverflow.com/a/22658693/2724703

对于简单的使用,您可以使用以下命令(如果您的程序是a.out)

$valgrind ./a.out

关于c - 无缘无故地在 c 中出现 SYSMALLOC 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22886309/

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