如何malloc char**表?

Fli*_*per 6 c arrays malloc free char

我正在尝试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);
Run Code Online (Sandbox Code Playgroud)

上面的代码编译得很好,我的代码之间的工作和运行也很好,但在运行时它会在免费部分中出错.另外,使用valgrind..it后表示free(letters [i]); 是无效的.

有帮助吗?

Mys*_*ial 5

问题出在这里:

letters[0] = "a";
letters[1] = "b";
letters[2] = "c";
letters[3] = "d";
letters[4] = "e";
Run Code Online (Sandbox Code Playgroud)

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

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

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

2:strcpy改为每个字符串文字.