我有解除分配的double
立方矩陣的函數:將指針指向指向指向int的指針的指針指向指向double的指針的指針是正確的嗎?
free_matrix(double ***U, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
free(U[i][j]);
}
free(U[i]);
}
free(U);
}
然後,我有整數int ***matrix;
的立方矩陣。編譯器給我一個錯誤,當我打電話給free_matrix(matrix,n)
,但我不想複製只釋放元素的前一個函數。這樣簡單地施放它是否正確/好/安全?
free_matrix((double ***)matrix,n);
不,它不是,因爲不同類型的指針都不能保證是相同的大小。你應該做的是實現一個類型通用的宏,其正文是你的代碼。一些東西'#define FREE_MAT(T)free_matrix_ ## T(T ** U,int n){...}' –