[1028] Re:自動変数を返すこと
投稿者:トル
2007/08/25 01:46:46
はじめまして。
>そこに載っている関数int_to_strではポインタを返しているからまずいの
>でしょうか?それとも、ポインタでなく整数値を返す場合でも、関数の
>中で宣言した自動変数の値を返すことはやめた方がよいのでしょうか。
呼び出し側で返されたポインタを使って、自動変数(のあった所)にアクセスしているからまずいのです。
>たとえば、次のような関数は(int_to_strと同じ観点から見て)まずいのでしょうか。
>
>int keep(int int_value)
>{
> int i;
> i = int_value * int_value;
> return i;
>}
この場合は問題ありません。
returnで変数の値を返すときは、それがポインタかどうかに関わらず、別の場所へ中身がコピーされます。
自動変数のポインタを返すとまずいのは、そのポインタが指す領域がなくなってしまうからです。
int *f(void)
{
int a = 0;
return &a;
}
と言う関数があったとき、
int *p = f();
printf("%p", p); /* pの値を表示する */
のようにすることは何の問題もありません。しかし、ポインタが指している領域はすでに開放されているので、
int *p = f();
printf("%d", *p); /* pが指している領域の値を表示する */
のような事はできない、と言うことです。
こんな感じでしょうか?