在c ++中释放动态2d字符串数组

时间:2013-12-02 16:52:29

标签: c++ dynamic multidimensional-array

我无法理解为什么我的删除方法不正确。

我的矩阵创建我有:

 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;

我的程序在删除的第一个条目

时崩溃

2 个答案:

答案 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;