0

重複の可能性:
ローカル変数のメモリにそのスコープ外でアクセスできますか?

double* weird( double a, double b )
{ 
    double c;
    c = pow( a + b, 0.5 );
    return &c;
}

ほとんどの人にとっては些細なことかもしれませんが、ここで何がうまくいかないのかわかりません。

4

3 に答える 3

8

ローカル変数へのポインタを返すため、これは非常に間違っています。

が返されると、スコープが関数で&cある変数が破棄されるため、メモリ内のランダムな領域を指すポインタが提供されます。これは未定義の動作です。cweird

于 2012-10-21T18:41:25.333 に答える
2

関数のスコープ内でローカル変数を宣言しますc。関数を終了すると、その変数は無効になります。したがって、その変数へのポインターは、その後は何の意味もありません。

于 2012-10-21T18:41:16.873 に答える
0

他の人が言ったように。

staticメソッド内または中括弧の間で宣言されている以外の変数{}にはローカルスコープがあります。メソッドから出るとすぐに、変数は破棄されます。

それでも必要な場合は、staticを使用してください

static double c;
于 2012-10-21T18:49:53.503 に答える