繁体   English   中英

如何malloc char **表?

[英]How to malloc char** table?

我正在尝试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..it后表示free(letters [i]); 是无效的。

有帮助吗?

问题出在这里:

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

你用字符串文字覆盖每个malloc指针。 然后你在最后一个循环中释放它们。 由于您实际上正在释放字符串文字,因此失败。

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

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

2: strcpy每个字符串文字。

您正在为数组中的每个字符串正确分配内存,但之后您没有使用该内存。 您改为在五个数组元素中的每一个中更改char*指针,以指向字符串文字“a”,“b”,“c”等。

因此,您丢失了对所分配的原始内存的引用,而是尝试释放不属于您的内存。

而不是像这样分配字符串指针:

letters[0] = "a";

你应该将字符串复制到你已分配的内存中,如下所示:

strncpy(letters[0], "a", 2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM