gpt4 book ai didi

调用 free() 导致我的程序崩溃

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

我遇到了一个非常奇怪的问题,尝试在分配的内存上调用 free 会导致我的程序崩溃。

相关代码如下:

int i, count;
char *specifier;
char aisle[1];
count = 0;

/*Find name of the new item and assign to the name field of new_node...*/
for (i = 0; input[i] != ','; i++){
count++;
}
specifier = (char*)malloc((count+1)*sizeof(char));
if (specifier == NULL){
printf("Out of memory. Shutting down.\n");
exit(EXIT_FAILURE);
}
for (i = 0; input[i] != ','; i++){
specifier[i] = input[i];
}
specifier[count+1] = '\0';
new_node->name = specifier;
printf("%s\n", new_node->name);
free(specifier); /*PROGRAM CRASHES HERE*/
printf("boom\n");
specifier = NULL;
/*Function continues here*/

这是我用于 new_node 的结构:

/*Outline for the stock levels system...*/
typedef struct item item_t;
struct item{
char *name;
char *aisle;
item_t *left;
item_t *right;
};

当我运行该程序时,第一个 printf 打印正确,但第二个打印不正确。关于原因有什么想法吗?

最佳答案

您为 count + 1 个元素分配空间...

specifier = (char*) malloc ( (count+1) * sizeof(char));

然后遍历你的数组(未定义的行为):

specifier[count + 1] = '\0';

关于调用 free() 导致我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30191242/

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