1. ホーム
  2. c++

[解決済み】delete[]は、オペランド配列のサイズをどのように「知って」いるのでしょうか?

2022-03-31 23:04:41

質問

Foo* set = new Foo[100];
// ...
delete [] set;

に配列の境界を渡さない。 delete[] . しかし、その情報はどこに保存されているのでしょうか?標準化されているのでしょうか?

どのように解決する?

ヒープ上にメモリを割り当てるとき、アロケータはどれだけのメモリを割り当てたかを記録します。これは通常、割り当てられたメモリの直前の "head" セグメントに格納されます。そうすれば、メモリを解放するときに、デアロケータは解放すべきメモリの量を正確に知ることができます。