gpt4 book ai didi

c - 断言在某个点失败

转载 作者:行者123 更新时间:2023-11-30 17:45:52 24 4
gpt4 key购买 nike

我不断收到此 malloc.c 断言失败消息。我看过其他类似的问题,但似乎找不到解决方案。这是我的代码...我在出错之前在该位置放置了一个 printf 。

int ParseCommand(char *cmd_line, struct command_t *cmd, char **paths)
{
int argc;
char **line_ptr;
char *tmp_name = (char *) malloc(sizeof(MAX_PATH_LEN));

/* Initialization */
line_ptr = &cmd_line;
argc = 0;
cmd->argv[argc] = (char *) malloc(MAX_ARG_LEN);

/* Fill argv[] Array */
while((cmd->argv[argc] = strsep(line_ptr, WHITESPACE)) != NULL) {
cmd->argv[++argc] = (char *) malloc(MAX_ARG_LEN);
}

/* Set The Command Name & argc */
cmd->argc = argc - 1;
tmp_name = LookupPath(cmd->argv, paths);

if(tmp_name == NULL) {
Fatal("Command Not Found!");
}
printf("HERE 4\n");
cmd->name = (char *) malloc(sizeof(tmp_name));
strncpy(cmd->name, tmp_name, MAX_PATH_LEN);
free(tmp_name);
}

错误是:

smallsh: malloc.c:2369: 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 (core dumped)

非常感谢您的帮助!

最佳答案

malloc(sizeof(tmp_name)) 将分配足够的空间来存储一个指针。然后,您将最多 MAX_PATH_LEN 个字节复制到该分配中,这显然是错误的。

您应该将 sizeof(...) 替换为正确的大小计算,可能是 1 + strlen(...)

此外,如果 tmp_name 的前 MAX_PATH_LEN 字节内没有 null 终止符,strncpy 不会以 null 终止目标缓冲区。这可能是一个错误。

关于c - 断言在某个点失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19532672/

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