プログラムに小さなメモリ アクセスの問題があり、エラーが見つかりません。誰かが助けてくれるかもしれません。
RGB カラー値を格納する新しい型を作成しました。そのタイプは次のようになります。
typedef struct pixel {
unsigned char r;
unsigned char g;
unsigned char b;
} pixel;
私のメイン プログラムでは、calloc を使用して 2D 動的配列を作成し、赤色の情報を格納します。
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
もし間違っていたら、もう少し詳しく説明していただけると助かります。私は本当にそれを理解したいです。
@ carl-norum とはどういう意味ですか:
「calloc() の戻り値をキャストするべきではありません。そうすることで、#include を使用してバグを隠すことができます。バグが戻ってきて、後で噛み付く可能性があります」.
? 戻り値としてではなく、関数のパラメーターとして割り当て領域を使用します。
ご協力いただきありがとうございます!
グリーツ