[1855] Re:crowbar ver2のnative pointerについて
投稿者:hiro
2013/01/11 16:30:22
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;
>}
>