1

私が知る限り、マトリックスを作成するこの 2 つの方法は同一である必要があります。

最初の方法:

int i;
int **matrix = (int**)malloc(R*sizeof(int*));
for (i=0; i<R; i++)
    matrix[i] = (int*)malloc(C*sizeof(int));

2 番目の方法:

int matrix[R][C];

R と C は次のように宣言されています。

#define R 3
#define C 5

私の質問は、2 番目の方法で宣言された行列を次のような関数に渡すときです。

void myfunction(int **m, int rows, int columns);

コードで:

myfunction(matrix,R,C);

マトリックス内の値に触れようとするとすぐにセグメンテーション違反が発生するのはなぜですか?

最初に宣言された行列を次のような関数に渡すと、同じことが起こります。

void myfunction(int m[][C], int rows, int columns);

私は何が欠けていますか?

4

3 に答える 3

0

範囲外の配列にアクセスしています。その場合、結果は未定義です。この行は次のように修正する必要があります

for (i=0; i<R; i++)
    matrix[i] = (int*)malloc(C*sizeof(int));
于 2013-10-14T16:37:47.187 に答える