簡體   English   中英

在C中釋放二維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM