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