このようなもので作成された2次元配列があるとすると、
char **foo = (char **) malloc(height * sizeof(char *));
for(i = 0; i <= height; i++)
foo[i] = (char *) malloc (width * sizeof(char *));
まず第一に、これはこのような配列を作成する正しい方法でさえありますか?ここでの落とし穴は、「高さ」と「幅」は実行時に設定されるものです。
これはうまくいくようですが、これはこの2Dアレイを解放するための最良の戦略です。free(funge)は間違っているように聞こえます。ここにある他のいくつかの投稿を見ていくと、各行を1つずつ無料にすることができると思いますか?
私はこのようなことを試みました、
for (height = 0; height < ip_ptr->funge_height; height++) {
free(funge[height]);
}
free(funge)
ただし、これにより、ダブルフリーポインタ例外が発生します。これは、このメモリを管理する必要がないという意味ですか?私は、mallocされたメモリごとに、free()を呼び出す必要があるという印象を受けました。