文字配列が作成され、メモリが動的に割り当てられるこのプログラムを実行しようとしています。その後、配列要素には、連続する 10 か所の文字列「hello」が入力されます。値は、strdup() 関数呼び出しを使用して文字列要素に割り当てられます。
すべての要素が割り当てられると、while ループで要素が解放されます。Visual Studio でプログラムを実行すると、char 配列への最後のポインターが解放された後にプログラムがクラッシュします。while ループの終了条件は正しいと思います。しかし、問題の原因を正確に特定することはできません。
コード:
char **p;
int i;
p = malloc(10 * sizeof(char *));
for (i = 0; i < 10; i++) {
p[i] = strdup(“hello”);
}
while (*p) {
free(*p++);
}