2011-07-07 25 views
1

私はすべてを試しましたが、私が理解したところでは、このコードは正しいですが、それでも私のセグメンテーションフォルトが得られます。助けて?動的多次元配列

#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'が宣言されているヘッダーをインクルードしないと、コンパイラは' void * 'の代わりに' int'を返します。 – pmg

答えて

6

オペレータ[]は、オペレータ*よりも優先されます。 角括弧をつける:(*array)[i]=(int *)malloc(sizeof(int)*col);

0

コードはOKと思われます。私の推測では、応答をチェックしていないので、mallocの1つが失敗しています(NULLを返します)。 NULL上の空き領域は明らかに失敗します。これは記憶の問題かもしれません。行と列の数字は何を使用していますか?

その他のアドバイスこのコードは複雑すぎます。規則的な行列を作成するので、単一の次元配列を作成する方が簡単で効率的です。

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