私がしたいのはchar** stringarr
です。c:空きchar *破棄せずに**
一部の地域では、stringarr[index]
、char*
を割り当てたいとします。 だから、char **
のいくつかの場所に文字列(char*
)を保存したいと思います。例えば プログラムが実行された後:
stringarr[0] = "Hello", stringarr[1] = "goodbye"
を問題は、私はchar *
は、文字列を保持して解放したいということではありませんが、私は、もちろんやるときstringarr[0]
もはや解放されたchar*
を指します。
どうすればこの問題を解決できますか?
明確にする: 文字列配列(char **)に文字列(char *)を追加したいとします。その後、私は文字列を解放しますが、文字列配列は解放しません。 char **に影響を与えることなく、どうすればこのことができますか?
_具体的な問題を明確にしたり、詳細を追加して必要なものを正確に強調してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。この質問を明確にする方法については、How to Askページを参照してください。 –
[How to ask page](http://stackoverflow.com/help/how-to-ask) – gavv
上記のコードは 'stringarr [0]'をポイントするように設定しています解放されない文字列リテラルに変換します。あなたができることは 'stringarr [0]'を 'NULL'のようなものに設定することです。代わりに 'char * foo = malloc(10);のようなことをします。 strcpy(foo、 "fred"); stringarr [0] = foo; 'を呼び出し、後で' free(foo) 'を呼び出すと、' stringarr [0] 'が指すバッファに決してアクセスしないようにあなたのコードに任されます。それを達成する方法はあなた次第です。あなたのコードが 'foo'を解放した後に' stringarr [0] = NULL; 'を再設定し、常に' stringarr [0] 'がNULLかどうかをチェックすることを確実にすることは、それを達成する一つの方法です。 –