【发布时间】:2013-12-02 16:52:28
【问题描述】:
我无法理解为什么我的删除方法不正确。
对于我的矩阵创建,我有:
43 matrix = new string*[row];
44 for(int i = 0; i < row; i++) {
45 matrix[i] = new string[col];
46 }
47 for(int i = 0; i < row; i++) {
48 for(int j = 0; j < col; j++) {
49 matrix[i][j] = array[i][j];
50 //cout << matrix[i][j] << ' ';
51 }
52 cout << endl;
53 }
然后在我的析构函数中我有:
15 for(int i = 0; i < row; i++) {
16 delete matrix[i];
17 }
18 delete matrix;
我的程序在第一次删除条目时崩溃
【问题讨论】:
-
试试
delete [] matrix[i]和delete [] matrix -
注意:
delete[]你是什么new[],delete你是什么new。也就是说,我怀疑您的包含对象(matrix是其中的成员)没有正确实施“三规则”。如果在修复数组删除语法后仍然存在这个问题(我想你会的),请发布包含matrix的类定义。 -
使用 std::vector。没有正当理由不这样做。
-
@MadScienceDreams 您的解决方案有效。你能解释一下为什么它是'delete [] matrix[i]'而不是前者吗?
-
@Jack:这就是指定语言的方式:array-new,
new[],必须与 array-delete,delete[]匹配。原因是每个都可以单独替换为用户定义的版本。通常,您无需担心这些低级细节,因为您会使用std::vector为您管理动态数组。
标签: c++ dynamic multidimensional-array