Alw*_*ing 3 c++ dynamic-memory-allocation
考虑以下使用动态分配的二维数组的方式(由于某种原因,这里的回复中没有出现这种方式):
const int nRows = 2, nCols = 3;
int (*arr)[nCols] = (int(*)[nCols])(new int[nRows * nCols]);
arr[1][1] = 2;
std::cout << arr[1][1] << endl;
delete[] arr;
Run Code Online (Sandbox Code Playgroud)
delete[]在这种情况下,最后一行是否正确释放了内存?
这是未定义的行为;参数的类型delete必须与相应的结果具有相同的类型new。
您可以使用以下方法改进代码:
int (*arr)[nCols] = new int[nRows][nCols];
Run Code Online (Sandbox Code Playgroud)
(甚至auto *arr =......)在这种情况下,相同的删除表达式将是正确的。必须使用演员表通常表明您走错了一步。