上級 › new[]とdeleteの不一致が「たまたま動いてしまう」危険性 › パターン2
new[]とdeleteの不一致が「たまたま動いてしまう」危険性
new[]で確保した配列に対して、delete[]ではなく単体用のdeleteを使ってしまう不一致です。
1 #include <iostream> 2 int main() { 3 double *vals = new double[10]; 4 ______________ ^ 5 std::cout << "done" << std::endl; 6 return 0; 7 }
出力: done(クラッシュせず動いてしまう)危険性: 未定義動作であり保証された動作ではない
空欄を埋めてコンパイル・実行を通す
「クラッシュしないなら問題ない」というのは危険な誤解です。オブジェクトの配列で同じミスをすると、配列内の最初の要素以外のデストラクタが呼ばれないなど、より深刻な形で表面化することがあります。
次の問題