[英]Freeing a 2-D array in C
請忍受,因為這可能是一個非常簡單的問題,但我對C還是陌生的。我正在嘗試malloc一個特定的數組,然后釋放它。 但是,這一行:
M = malloc(N*sizeof(double *));
...不起作用。 有人可以向我解釋為什么這不起作用以及解決方案是什么嗎? 提前謝謝了。
您應該釋放所有職位,而不僅僅是第一職位。 看到我寫的這個例子。
如@Grijesh所述,分配也是錯誤的。 該示例也涵蓋了分配。 此外,我建議您不要轉換malloc的返回值( 更多 )。
您必須將2D數組視為1D數組,其中的每個單元格都是指向1D數組的指針。 圖片可能會有所幫助: http : //gsamaras.files.wordpress.com/2014/04/array2d-n.png此處,保存指針的1D數組位於左側,每個單元格都指向另一個1D數組。 左邊有幾個一維陣列? 與左數組中的單元格一樣多。
順便說一句,內莉,我認為這不是一個愚蠢的問題,它會使初學者陷入困境。 ;)
編輯:關於您的新代碼,您必須具有與matrix_free相同的定義和聲明,並根據需要進行調用。 什么是定義等? 回答 。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define Nmax 9000
double **makeMatrix(int N);
void free_matrix(double **M,int N);
int main(void) {
int N;
for (N = 2; N < Nmax; N *= 2) {
double **L = makeMatrix(N);
printf("yes \n");
free_matrix(L, N);
printf("woo \n");
}
return 0;
}
double **makeMatrix(int N) {
int i, j;
double **M;
M = malloc(N * sizeof(double *));
for (i = 0; i < N; i++)
M[i] = malloc(N * sizeof(double));
for (i = 1; i < N; i++) {
for (j = 1; j < N; j++) {
M[i][j] = (i) * (j) * M_PI / N;
}
}
return (M);
}
void free_matrix(double **M, int N) {
int i;
for (i = 1; i <= N; i++) {
free(M[i]);
}
free(M);
}
然后我收到您的輸出。 :)但是,它將停止在某個點,因為NMAX太大! 不僅NMAX太大,而且N增長非常快( N *=
)。 你在紙上做過數學運算嗎? 數字太大。 例如,如果我執行N +=
,那么我可以直到NMAX = 9000
。 調試提示 :我怎么知道它到達哪個循環? 我像這樣打印出循環的計數器
printf("woo %d\n",N);
當然,如果您對自己有把握,那么建議您學習調試器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.