我的程序中有一個小的內存訪問問題,我沒有找到錯誤,也許有人可以幫助我。在2D數組中寫入分段錯誤
我創建了一個新類型來存儲rgb顏色值。 這種類型的樣子:
typedef struct pixel {
unsigned char r;
unsigned char g;
unsigned char b;
} pixel;
在我的主程序我用calloc創建二維數組動態,存儲紅色信息的。
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空間作爲函數的參數,而不是返回值。
感謝您的幫助!
格爾茨
嗨,謝謝你的解決方案正常工作。現在我有一些理解問題,看我編輯。謝謝。 – hofmeister 2012-02-03 08:53:03
@Taz - 我會編輯以解決您的修改一時。 – 2012-02-03 18:44:31