2011-07-07 106 views
1

我嘗試了一切,並從我的理解,這段代碼是正確的,但它仍然給我的分段錯誤。幫幫我?Dynamic Multidimensional Arrays

#include <stdio.h> 
#include<malloc.h> 

void da(int ***array, int row, int col){ 
    int i; 
    *array=(int **)malloc(sizeof(int *)*row); 
    for (i=0; i<row; i++) 
     *array[i]=(int *)malloc(sizeof(int)*col); 
} 

main(){ 
    int **array; 
    int i,n,m; 
    printf("Input number of rows: "); 
    scanf("%d",&n); 
    printf("Input number of columns: "); 
    scanf("%d",&m); 
    da(&array,n,m); 
    for (i=0; i<n; i++) 
     free(array[i]); 
    free(array); 
} 
+0

它在哪裏段錯誤?你到目前爲止嘗試解決這個問題? –

+0

請勿施放'malloc'的返回值。鑄造充其量是多餘的,並且(**和你的代碼**一樣)可能會隱藏錯誤; *即沒有聲明'malloc'的頭文件,使得編譯器假定返回類型是'int'而不是'void *'。* – pmg

回答

6

操作[]比運營商更*優先。 放上括號:(*array)[i]=(int *)malloc(sizeof(int)*col);

0

該代碼似乎沒問題。我的猜測是其中一個malloc失敗(返回NULL),因爲你沒有檢查響應。 NULL上的空閒顯然失敗。這可能是一個剩餘的記憶問題。你使用的是哪些行和列的數字?

其他建議。此代碼過於複雜。由於您創建的是常規矩陣,因此創建單維數組更簡單,更高效。

void da(int **array, int row, int col){ 
    int i; 
    *array=(int *)malloc(sizeof(int)*row*col); 
    return; }