4

これが私のプログラムです

 int* fun1(void)
 {
    int n=9;
    int *pf=&n;
    cout<<*pf<<endl;
    return pf;
 }
 int main(int argc, char *argv[])
 {
    int *p=fun1();
    cout<<*p;
    return 0;
 }

プログラムのコンパイルと実行には問題はありませんが、valgrind を使用すると、「サイズ 4 の読み取りが無効です」というメッセージ/警告が表示されます。

警告を解決するための助けは大歓迎です

4

4 に答える 4

4

nはローカル変数でfun1()あり、関数の終了後は無効になります。

于 2013-11-05T09:39:16.873 に答える
1

ローカル変数は、関数がアクティブな場合にのみ存在します。pfローカル変数へのポインターを返します。関数を終了するとすぐに、変数に割り当てられていたメモリが解放され、未定義の動作が発生します。

于 2013-11-05T09:42:37.203 に答える
0

ローカル変数のアドレスを返していますが、valgrind はそのことを警告しています。メインでこのポインターにアクセスすると、未定義の動作が呼び出されます。

于 2013-11-05T09:42:29.403 に答える