[1854] Re:crowbar ver2のnative pointerについて
投稿者:774RR
2013/01/11 11:58:28
>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;
}