ポインターへのポインター (char**) を、それを初期化する関数に渡してから、メモリを解放する別の関数に渡そうとしていますが、解放時にセグ フォールトが発生してしまいます。私の割り当てが間違っていると信じるために。
Valgrind は、この行で初期化されていない値の使用を報告しています。tmp[i] は 0x0 を指しています。
if(tmp[i]) free((char*)tmp[i]);
これがコードです(これはテストコードのみです)
void
alloc_strings(char ***test, int count)
{
char **tmp = *test;
tmp = malloc(count * sizeof(char*));
int i;
for(i = 0; i < count; i++) {
tmp[i] = malloc(6);
strcpy(tmp[i],"Hello");
}
}
void
free_strings(char ***test, int count)
{
char **tmp = *test;
int i;
for(i = 0; i < count; i++) {
if(tmp[i]) free((char*)tmp[i]);
}
if(tmp)
free(tmp);
}
そして呼び出し:
int
main(int argc, char **argv)
{
char **test;
alloc_strings(&test, 10);
free_strings(&test, 10);
return 0;
}
私はしばらくこれをいじっていましたが、ポインターなどを読んでいますが、問題を回避することはできません。どんな考えでも大歓迎です!