私のプログラムでは小さなメモリアクセスの問題があり、エラーが見つからない場合は、誰かが助けてくれるかもしれません。2Dアレイに書き込むことによるセグメンテーションフォールト
rgbの色の値を格納する新しいタイプを作成しました。 そのタイプは、次のようになります。私は、のcallocと2次元動的配列を作成し、赤の色情報のを保存するために私のメインプログラムでは
typedef struct pixel {
unsigned char r;
unsigned char g;
unsigned char b;
} pixel;
。
pixel **pixelvalue = (pixel **) calloc(imginformation.width, sizeof(pixel));
for (i = 0; i < imginformation.width; i++) {
pixelvalue[i] = (pixel *) calloc(imginformation.height, sizeof(pixel));
}
その後、私は色の値を読み取って、それらを安全にする必要がある私の関数を呼び出します。この関数は配列としてパラメータを取得します。その関数で
ReadFile(file, imginformation (Stuff like height and so one), pixelvalue (The calloc array));
私は
pixelvalue[i][j].r = (unsigned char)fgetc(in);
に値を書き込むしようとここで私は私が間違って何をしたか、メモリアクセスエラーを取得しますか?
編集
こんにちは、不足している言語に関するすべて申し訳ありませんの最初、私は昨日、少し疲れていた:)。
私はピクセルの配列を作成し、その要素はピクセルの別の配列を指していますか? [Point to another 1D array pixel]
のようなもの?
ピクセルの場合**pixelvalue = calloc(imginformation.width, sizeof(pixel *));
imginformation.width
タイプのピクセルからポインタの番号を作成し、ピクセルごとに表示します。
私が間違っていれば、もう少し説明できたらすばらしいと思います。私は本当にそれを理解したいと思います。カール・norum @
あなたが何を意味するか:。
を「あなたはのcallocの戻り値をキャストするべきではありません()ので、噛まないように戻ってくる可能性の#includeと 非表示のバグをすることができます行いますあなたは 道路を下りました。 "
?関数の戻り値ではなくパラメータとしてalloc空間を使用します。
ありがとうございました!
Greetz
、感謝あなたのソリューションが正常に動作します。今私はいくつかの問題を理解している、私は編集を参照してください。ありがとう。 – hofmeister
@ Taz - あなたの変更を一時的に解決するように編集します。 –