[英]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.