gpt4 book ai didi

c - 在 C 中释放内存时出错

转载 作者:太空宇宙 更新时间:2023-11-04 05:01:08 24 4
gpt4 key购买 nike

我写了一道练习指针和分配内存的题。

但是,当我释放内存时,我得到了一个堆栈转储。我在正确的地方释放吗?我的程序是否还有其他可能导致不安全的问题?

void display_names(char **names_to_display, char **output);

int main(void)
{
char *names[] = {"Luke", "John", "Peter", 0};
char **my_names = names;
char *new_output[1024] = {0};
size_t i = 0;

// Print the ordinal names
while(*my_names)
{
printf("Name: %s\n", *my_names++);
}

my_names = names; /* Reset */
display_names(my_names, new_output);

// Print the updated names
while(new_output[i])
{
printf("Full names: %s\n", new_output[i]);
i++;
}

// Free allocated memory
free(new_output);

getchar();

return 0;
}

void display_names(char **names_to_display, char **output)
{
while(*names_to_display)
{
*output = (char*) malloc(strlen("FullName: ") + strlen(*names_to_display) + 1);
if(!*output)
{
fprintf(stderr, "Cannot allocate memory");
exit(1);
}

// Copy new output
sprintf(*output, "FullName: %s", *names_to_display++);
printf("display_names(): Name: %s\n", *output++);
}
}

最佳答案

你没有为new_output分配内存,它是由编译器分配的。 free 用于在运行时 malloc 内存时使用,而不是用于释放编译器在编译时分配的内存。

您的 new_output 是一个局部变量,当它超出范围时将被“释放”,即在声明它的函数的右大括号处。

关于c - 在 C 中释放内存时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/959289/

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