我无法理解为什么我的删除方法不正确。
我的矩阵创建我有:
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;
我的程序在删除的第一个条目
时崩溃答案 0 :(得分:0)
如前所述,您必须将new[]
与delete[]
配对。在这些方面:
matrix = new string*[row];
matrix[i] = new string[col];
您使用new[]
,因此稍后您必须执行以下操作:
delete[] matrix[i];
delete[] matrix;
供参考,请参阅this link。
当您分配二维数组时,您确实创建了N. 一维数组。现在每个都必须删除,但是 系统不知道有多少。的大小 顶级数组,即指向第二级的指针数组 数组,就像C中的任何其他数组一样:它的大小不存储 系统。
如果您使用delete
代替delete []
,那么valgrind必须说些什么:
==30045== Mismatched free() / delete / delete []
==30045== at 0x4A05FD6: operator delete(void*) (vg_replace_malloc.c:480)
==30045== by 0x400725: main
==30045== Address 0x4c2e040 is 0 bytes inside a block of size 160 alloc'd
==30045== at 0x4A07152: operator new[](unsigned long) (vg_replace_malloc.c:363)
==30045== by 0x400715: main
答案 1 :(得分:0)
matrix = new string*[row];
for(int i = 0; i < row; i++) {
matrix[i] =delete[col];
}
delete[] matrix;