※ ChatGPTを利用し、要約された質問です(原文:文字列のメモリ保持期間とポインタについてわからないので教えてください。)
文字列のメモリ保持期間とポインタについての疑問
このQ&Aのポイント
文字列のメモリ保持期間とポインタについて説明します。
ポインタで確保された文字列のメモリは明示的に開放する必要があります。
文字列を返却したり、他のオブジェクトに格納する場合は注意が必要です。
文字列のメモリ保持期間とポインタについてわからないので教えてください。
文字列のメモリ保持期間とポインタについてわからないので教えてください。
よくポインタの説明に、文字列を使った下記のようなサンプルコードが紹介されます。
char* s;
s = "abcdefg";
printf("%s",s);
(http://www2.netf.org/pointer3.html から引用)
この"abcdefg"により確保された領域がいつまで保持されるのかわかりません。
・これを実行しているメソッドを抜けるまでなのか?
・free(s)するまでなのか?(free(s)しなければいけないのか?)
この例だとprintfして終わっていますが、sを戻り値として返却して他で利用したり、オブジェクトを生成して、そのメンバ変数に
obj1->field1 = "value";
というように格納して利用することとか考えると、領域は勝手に開放されず、やっぱり明示的にfreeするということでしょうか?
freeしないといけない、なんて記述も見たことがなくよく理解できずにいます。
よろしくお願いします。
お礼
ダブルクォートで作成した文字列は静的な定数として扱うんですね。 文字列の内容を変更するような場合には、メモリを確保してそこに内容をコピーしてから使用するというのは初耳でした。