doubleポインタとしてグローバルに宣言された2次元配列を出力しようとしましたが、main()
の関数で初期化されましたが、コアダンプエラーが発生します。
ここで何が間違っていますか?関数内で初期化された2次元配列の出力
ファイルに格納された配列:
1 2
3 4
5 6
コード:
#include <stdio.h>
#include <stdlib.h>
int** matrix_A = 0;
void initArray (int** matrixPtr, FILE* matrixFP, int row, int col);
int main (int argc, char* argv[])
{
FILE* matrixAfp = fopen (argv[1], "r");
int M = atoi (argv[3]);
int N = atoi (argv[4]);
initArray (matrix_A, matrixAfp, 3, 2);
for (size_t m = 0; m < M; m++)
{
for (size_t n = 0; n < N; n++)
{
printf ("%d \n", matrix_A[m][n]);
}
}
return 0;
}
void initArray (int** matrixPtr, FILE* matrixFP, int row, int col)
{
matrixPtr = (int**) malloc (row * sizeof (int*));
for (size_t m = 0; m < row; m++)
{
matrixPtr[m] = (int*) malloc (col * sizeof (int));
}
for (size_t n = 0; n < row; n++)
{
for (size_t o = 0; o < col; o++)
{
fscanf (matrixFP, "%d", &matrixPtr[n][o]);
}
}
}
「M」と「N」はどこに定義されていますか? –
ああ、私はより多くの行を持っていますが、それらを省略しました.MとNはコマンドライン引数です。Mは行数とN列数です。私は質問を更新しました。ありがとう。 –
'initArray()'の 'malloc()'を 'main()'に移動して問題を解決できます。 – CWLiu