-2

Xcode 4.3.2 で自動参照カウント (ARC) を無効にしました。次に、この小さなプログラムを書きました。

int main()
{
    int *a = new int(3);
    delete a;
    printf("%i",*a);
    return 0;
}

これは3を印刷していますが、ガベージを印刷する必要があります。コンパイラがすべてのメモリ割り当てを処理しているように見えますが、これは望ましくありません。それを取り除くにはどうすればいいですか?

4

1 に答える 1

2

new を使用して、プログラムにヒープ上のアドレスを指定します。そのアドレスの値が 3 の整数です。そのヒープ領域を delete で解放すると、すぐにガベージ値に設定されず、まだ 3 が含まれています。print ステートメントは a のアドレスに移動し、そこにある整数を出力しようとします。3 を見つけて出力します。

これが xcode で可能な場合は、コンパイラの警告を追加してみてください。gcc や他のコマンド ライン コンパイラがこの機能を提供していることは知っています。

于 2012-05-17T19:49:30.477 に答える