我正在解決一個量子機器問題,它需要我通過操縱一些矩陣來找到一些特徵值。這個問題的細節是不相關的,我只需要幫助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