試した環境
- Microsoft Visual Studio Community 2019 Version 16.4.5
本題
以下のコードのように new 演算子で確保した複数の変数を1つの delete 演算子とコンマ演算子でまとめて解放することは出来ません。
#include <iostream> int main(int argc, char* argv[]) { int* a = new int[100]; int* b = new int[100]; for (int i = 0; i < 100; ++i) { a[i] = b[i] = i; } delete[] a, b; for (int i = 0; i < 100; ++i) { //std::cout << "a[i] = " << a[i] << "\n"; // access violation std::cout << "b[i] = " << b[i] << "\n"; } return 0; }
それぞれの変数に delete 演算子を使わないといけません。
delete[] a; delete[] b;
上記の例では配列の new, delete 演算子で示しましたが、 配列でない new, delete 演算子でも同じです。
int main(int argc, char* argv[]) { int* c = new int; int* d = new int; //delete c, d; // NG delete c; delete d; return 0; }
うっかりやってしまいそうなミスです。