質問: realloc((void*)p, 15); delete p[]; ``` よろしくお願いします。 すいませんdeleteはミスです。修正しました。
回答: 仕様についてのコメントがありますが、実際に問題も生じます。 new[]した際には各要素に対してそれぞれコンストラクターが実行されます。そしてdelete[]の際には各要素に対してそれぞれデストラクターが実行されます。さて T* 変数にはアドレスしかなくdelete[]が何要素分のデストラクターを実行すればいいかが不明です。 そのためコンパイラーはどこか別の領域に要素数を保持しておきdelete[]が呼ばれた際にはその情報を元にデストラクターを実行するようなコードを生成します。realloc()をしてしまうとこの情報が崩れます。 後出しで条件を追加されたので追記します。 要素数をどこに保持しておくかですが、new]の際にsize_tだけ大きく確保し、先頭に要素数を格納し、size_tだけずらしたアドレスを返す[over-allocationという方法もあります。この場合、new[]で得られたアドレスそのものはmalloc()で返されたアドレスとは異なるためそもそもrealloc()に成功しません。この辺りは実装依存となり使用するのは危険です。