-2

次のコードでは何が起こるでしょうか?

    int *p1 = new int[100];
    int *p2 = &p1[50];
    delete [] p2;

new の一部の実装では、配列のサイズを (-1) 番目の配列インデックスに格納していると聞いたことがありますが、上記の場合はひどく問題が発生するのではないでしょうか?

4

1 に答える 1

1

物事は間違いなくうまくいかないでしょう!

delete []演算子は、適切な配列ポインターでのみ機能するように定義されていますそして適切とは、 new演算子で配列が作成されたメモリ内の場所を指すように以前に初期化されたポインターを受け取る必要があることを意味します。

また、new/delete と malloc/free を混同してはなりません。原則として、で割り当てられたメモリは常に削除し、 (および派生物)で割り当てられたメモリをnew解放します。malloc

于 2013-03-01T02:29:35.903 に答える