我正在解决一个量子机器问题,它需要我通过操纵一些矩阵来找到一些特征值。这个问题的细节是不相关的,我只需要帮助C++的问题,我是这个语言的新手,几个小时后,我发现任何尝试自己解决这个问题都是徒劳的,所以我转向你寻求帮助。删除双指针(矩阵)
我有这个问题,其中glibc在我的程序结束时检测到错误,我无法正确释放,但在这里复制粘贴太大,所以我只会复制实际出现错误的部分。
void hamiltonian(int, double **&);
int i,j;
int main()
{
int N = 1000; double **A;
hamiltonian(N, A);
//Physics here
.
.
.
.
.
//Delete
for(i=0; i<N; i++){delete []A[i];}
delete []A;
return 0;
}
void hamiltonian(int N, double **&A)
{
A = new double *[N];
for(i=0; i<N; i++)
{
A[i] = new double[N];
for(j=0; j<N; j++)
{
if(i==j)A[i][j] = 2;
if(i==j+1 || i==j-1){A[i][j] = 1;}
}
}
}
根据我的教授我有同样的功能要解除我分配,但我压根没想到关于释放被几乎与我的项目完成后,所以我必须重新编写大量的代码,该问题是我不能在哈密尔顿函数内部释放A,因为我需要它在其他函数中(在物理内部)。
一定有办法解决这个问题吗?可能听起来有点无知,但这听起来像是一个效率较低的设计,如果我不得不按照我分配的相同函数进行释放。
编辑添加删除[A]和A [1] =新的双[N]; – arynaq
实现自己的矩阵功能对于学习C++可能行得通,但是如果你的主要目标是量子机器问题,找到一个能够在矩阵上操作并使用特征值的现有库不是更好吗? – maxim1000
@ maxim1000是的,但它没有那么多的乐趣:p – arynaq