1

タイトルが明確でない場合は、次の例があります。

    int *a = new int[5];
    int*b = a;
    delete[] a;
    a = NULL;

現在aは NULL ですが、bそうではありません。にアクセスするbと、間違った値が返され、プログラムがクラッシュする可能性があります。

これを防ぐ方法は?

4

1 に答える 1

4

現在 a は NULL です

ではない正確に。a「無効な」( delete-d) メモリを指しています。にしたい場合はNULL、手動で無効にします。


delete a;

でなければなりません

delete[] a;

これを防ぐ方法は?

本当に (生の) ポインターを使用する必要がある場合は、 の有効期間に注意してaください。参照も同様です。これにも注意が必要です。

同様の状況を回避するには、スマート ポインターが役立ちます。または、代わりにスタック変数を使用してください (もちろん、該当する場合)。

于 2014-03-25T14:34:15.113 に答える