【发布时间】:2014-04-05 20:21:51
【问题描述】:
我在 C 程序上收到一条 sSYSMALLOc 错误消息,我相信这个错误消息与我使用的 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
【问题讨论】:
-
您的代码(我们看不到的部分)很可能会写入 malloced 内存之外的部分并丢弃内部 malloc 数据。换句话说,有一个错误。
-
有道理,只是想弄清楚我将如何解决它。在我的程序中还有另外两个地方使用 malloc