我正在解决一个量子力学问题,该问题需要我通过操纵一些矩阵来找到一些特征值。这个问题的细节无关紧要,我只需要 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在汉密尔顿函数内部,因为我在其他函数中需要它(在 //Physics 内部)。
肯定有办法解决这个问题吗?可能听起来对我有点无知,但如果我必须在与分配相同的功能中解除分配,这听起来像是一个效率较低的设计。