-1

以下のケースがあります。

int *arrayP=new int[4];
arrayP[0]=0;arrayP[1]=1;arrayP[2]=2;arrayP[3]=3;
int *temp;
cout<<arrayP[0]<<endl;
temp=arrayP;
++arrayP;
cout<<arrayP[0];
cout<<arrayP[1];
delete temp;
cout<<arrayP[0];

出力

0
1
2
-1212222

なぜそうなのですか?arrayP はサイズ 4 の配列の最初の要素を指します。したがって、temp も最初の要素を指します。なぜ一時を削除すると、つまり最初の要素も整数配列全体を削除するのでしょうか。arrayP は配列の次の要素のアドレスを格納するため、配列は孤立していません(arrayP [0]がガベージ値を示しているため、整数配列を削除したと思います。)

その場合 (つまり、temp を削除すると整数配列全体が削除されます)、delete[] と delete の違いは何ですか。

4

1 に答える 1

8

使用するnew[]場合は、 でバランスを取る必要がありますdelete[]

使用するnew場合は、 でバランスを取る必要がありますdelete

それらを混在させると、メモリ リークやプログラム クラッシュが発生します (技術的に未定義の動作)。(あなたの例では、C++ は 4 を作成したことを内部的に記録していますint。呼び出しdelete[]により、C++ はこのレコードにアクセスできます。呼び出しdeleteはできません)。

于 2013-07-04T14:49:12.007 に答える