0

私はすでに2次元のmallocされた配列のかなりの数の質問を見てきましたが、基本的に何らかの理由で解決策を見つけることができません....私のGoogle fu sux申し訳ありません=(。ここで助けてくれたみんなに感謝! =)

とにかく、私はこのfscanfを動作させることができないようです=/誰かが私を助けることができれば、エラーはまったく見られないので大歓迎ですが、プログラムがクラッシュするのはこの時点であるため、エラーがあることはわかっています。

    array1 = (int**)malloc((c)*sizeof(int*));
        int a = 0, i = 0;
        for (a = 0; a < c; a++){
            array1[a] = (int*)malloc((c+1)*sizeof(int));

        }
    a=0;

    for(a = 0; a < c; a++){
                for(i = 0; i < c; i++){
                fscanf(ifp, "%d", array1[a][i]);

    }
    }

ここで、c は必要な配列の最大サイズです。この場合、3に設定されていますが、変数として必要です

4

5 に答える 5

5

関数ファミリーを使用しscanfて値を読み取る場合、宛先はポインターである必要があります。array1[a][i]はポインタではなく、実際の値です(これscanfはポインタとして扱われ、未定義動作の領域に入りました)。

あなたが欲しいのはです&array1[a][i]

PS。の戻り値をキャストしないでくださいmalloc

于 2013-02-08T06:31:44.730 に答える
1

fscanfはポインターを受け取るので、3番目の引数の前にアンパサンドを付ける必要があると思います。コンパイラはそれについて警告しませんでしたか?

于 2013-02-08T06:32:33.863 に答える
1

あなたがしたい:

fscanf(ifp, "%d", &array1[a][i]);
                  ^
于 2013-02-08T06:33:19.620 に答える
1

malloc およびその他の構文は正しいですが、問題は配列への値の読み取りにあります

これを交換 fscanf(ifp, "%d", array1[a][i]);

fscanf(ifp, "%d", &array1[a][i]);

常にコンパイラの警告を有効にして、それに注意してください:)

于 2013-02-08T06:34:06.863 に答える
0

これを読む必要があります。

マンページを読む習慣をつけてください。それは大いに役立ちます。

于 2013-02-08T06:39:22.713 に答える