gpt4 book ai didi

c - 如何 malloc char** 表?

转载 作者:太空狗 更新时间:2023-10-29 17:21:41 33 4
gpt4 key购买 nike

我正在尝试 malloc 并释放一个小的单字母字符串数组/表。我知道这可以在数组中完成,但我想尝试使用 malloc 和 free 来完成。

我现在有这个:

char **letters = (char**) malloc(5 * sizeof(char*));
int i =0;
for(i=0; i < NUMLETTERS ; ++i )
{
letters[i] = (char*) malloc(2*sizeof(char)); //2 is for the letter and null terminator
}

letters[0] = "a";
letters[1] = "b";
letters[2] = "c";
letters[3] = "d";
letters[4] = "e";

//Do stuff here

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


free(letters);

上面的代码编译得很好,我的代码也可以正常运行,但在运行时,它在空闲部分出现错误。此外,在使用 valgrind 后...它说 free(letters[i]); 无效。

有什么帮助吗?

最佳答案

问题出在这里:

letters[0] = "a";
letters[1] = "b";
letters[2] = "c";
letters[3] = "d";
letters[4] = "e";

您正在用字符串文字覆盖每个 malloc 的指针。然后在最后的循环中释放它们。由于您有效地释放了字符串文字,因此它失败了。

有两种方法可以解决这个问题:

1:如果您只是将字符串文字分配给它们,则不需要内部分配。所以摆脱这两个循环。

2: strcpy 代替每个字符串文字。

关于c - 如何 malloc char** 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7812805/

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