上級 › new[]とdeleteの不一致が「たまたま動いてしまう」危険性 › パターン3
new[]とdeleteの不一致が「たまたま動いてしまう」危険性
new[]で確保した配列に対して、delete[]ではなく単体用のdeleteを使ってしまう不一致です。
1 #include <iostream> 2 int main() { 3 char *buf = new char[64]; 4 _____________ ^ 5 std::cout << "done" << std::endl; 6 return 0; 7 }
出力: done(クラッシュせず動いてしまう)危険性: 未定義動作であり保証された動作ではない
空欄を埋めてコンパイル・実行を通す
new[]とdeleteの対応、およびnewとdelete[]の対応、どちらの組み合わせ違いも未定義動作です。確保に使った形と解放に使う形は必ず揃える必要があります。
次の問題