K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>774RR様 > >ご回答ありがとうございます. >納得です.そういえば,昔そういう話を授業で聞いたことを思い出しました. > >ありがとうございました. > >>>char *str >>>switch(type) { >>> case XXX_EXPRESSION: >>> str = "文字列" >>>} >>> >>>return str; >>>これだと,リターンされる文字列は自動変数なので,関数を抜けたらメモリが開放されるため,バグになる可能性があるのではないでしょうか? >> >>この例では、実は リターンされる文字列は自動変数 ではないのです。 >>消滅するのは、自動変数 str というポインタ変数のためのメモリ領域 >>return の前後で str に入っていた値 が複写される >>ポインタ変数の値、すなわち str が指す先は "文字列" という [ストリングリテラル] である >>ストリングリテラルはプログラム終了まで消滅しない >>ので、この例は100%合法です。 >> >>以下の例だと 文字列 str が真に自動変数であるためバグります。 >>const char* buggy_sample_func() { >> char str[100]; >> strcpy(str, "文字列"); >> return str; >>} >>
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!