gpt4 book ai didi

更正字符串数组 C 的 free()

转载 作者:太空狗 更新时间:2023-10-29 14:52:28 28 4
gpt4 key购买 nike

这可能是新手的错误,但我非常感谢任何关于我到底做错了什么的提示。

代码:

int main()
{
int i =0;
char ** nameslist;
nameslist = malloc(5 * sizeof(char*));

for (i=0; i <5; i++)
{
nameslist[i]=malloc((20+1)*sizeof(char));
}

nameslist[0]="John";
nameslist[1]="Adam";
nameslist[2]="Nick";
nameslist[3]="Joe";
nameslist[4]="Peter";

for (i=0; i <5; i++)
{
free(nameslist[i]);
}

free(nameslist);
return 0;
}

使用 Valgrind,我仍然发现堆内存泄漏 - 我该如何解决这个问题?我怀疑我 malloc 太多空间 - 但是,如何释放我不需要使用的空间?

感谢任何提示!

最佳答案

问题是当你这样写的时候:

nameslist[0]="John";

您实际上并没有使用分配的内存。 “John”本身是一个指针,您正在用这个新指针覆盖 malloc 返回的地址。

使用strncpy() 函数将字符串复制到您分配的内存中。

关于更正字符串数组 C 的 free(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22358753/

28 4 0
文章推荐: Android React Native 本地镜像源使用变量
文章推荐: html - 从 vb.net 代码端隐藏
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com