2013-04-03 65 views
1

我写了两个函数 - 一个创建二维双数组,另一个删除它。如何删除二维双数组

double** createMatrix(int n) 
{ 
    double **a = new double *[n]; 
    for (int i=0; i < n; i++) 
     a[i] = new double[n]; 
    return a; 
} 

void deleteMatrix(double** a, int n) 
{ 
    for (int i=0; i < n; i++) 
     delete [] a[i]; // ERROR HERE 
    delete []a; 
} 

分配的数组工作正常。但是,当我尝试释放它时,出现错误(在标记行上):“project2.exe触发了一个断点。” 我使用Visual Studio 2012

编辑: 我创建了一个完整的程序:

int main() 
{ 
    const int n = 10; 
    double **m = createMatrix(n); 
    deleteMatrix(m, n); 
    return 0; 
} 

而且它的正常工作。另外,我发现我的问题。这是copyMatrix函数中的一个错字。

for (int j=0; j <= n; j++) // should be < instead of <= 
    a[i][j] = originalMatrix[i][j]; 

非常感谢您的帮助!

+2

你可以制作一个小**完整的程序,展示这个问题? –

+4

有什么理由不使用'std :: vector >'? – Xymostech

+3

这就是做这件事的方法。还有别的,这是错误的。例如,'deleteMatrix'中的无效指针'a'。在'deleteMatrix'中,你可以尝试打印所有值来查看,还有其他的错误。 –

回答

1

显而易见的解决方案不是首先使用数组。

如何创建一个n x n矩阵?

#include <iostream> 
#include <vector> 

using Row = std::vector<int>; 
using Matrix = std::vector<Row>; 

int main() { 
    size_t const n = 5; 

    Matrix matrix(Row(n), n); 
} 

简单吧?作为奖励,免费提供复制,移动和销毁。