質問: "ABC"; もメソッドが終わってもメモリ上に残っているように思えるのですが、 開放する必要があるのでしょうか。 上記のような指定の仕方は使わなければいいだけなのですが、 気になってしまいました。 変な質問ですいませんが、宜しくお願いします。
回答: ANo.1の補足について。 "ABC"のような記述に対してはコンパイラはコード領域あるいは静的データ領域に領域を確保しています。これはプログラムの開始から終了まで確保されたままです。 char *p; p = "ABC"; は、このあらかじめ確保された領域の先頭アドレスをポインタ変数pに代入しているだけです。 したがって p[0] = 'a'; のように書き換えてはいけません。仕様上は何が起きるか分かりません。 ちなみに char str[] = "ABC"; は"ABC"が入る大きさ4の文字配列strを確保して"ABC"の内容をコピーしています。 char str[4]; strncpy(str,"ABC",4); と実質的に同じです。 この場合は str[0] = 'a'; のように書き換えてもかまいません。