開發平台(Platform): (Ex: Win10, Linux, ...)
win 7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
code blocks
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
兩種情況,第一種正常,第二種有問題,不懂為什麼。
1.
void test(unsigned char img[640][480])
{
unsigned char *img_r; //用一維指標接二維陣列(不懂目的,有甚麼好處嗎?)
imgr = &img[0][0];
執行運算..
}
main()
{
unsigned char img[640][480];
...
test(img);
}
2. 其實這是我改的,compile出錯,有時卻會順利執行到結束
void test(unsigned char **img)
{
unsigned char *img_r; //用一維指標接二維陣列(不懂目的,有甚麼好處嗎?)
img_r = img;
執行運算..
}
main()
{
unsigned char **img;
unsigned long i;
img=(unsigned char**)malloc(512*sizeof(unsigned char*));
for(i=0; i<512; i++)
img[i]=(unsigned char*)malloc(640*sizeof(unsigned char));
test(img);
}
餵入的資料(Input):
image raw data
預期的正確結果(Expected Output):
我是不知道為何原本的程式要把二維位址傳到一維,
但不論目的,我覺得我改這樣跟原本沒甚麼差吧?
除了在記憶體內 可能排列不太一樣之外(?
錯誤結果(Wrong Output):
有時程式執行到一半直接當掉,檢查是在test副程式內運算一維陣列時出錯
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
1.我不知道為何要丟給一維去處理,這樣有甚麼好處嗎? 比較快?
(那乾脆讀圖就用一維接阿@@?)
2.我這兩種寫法有甚麼具體的差別嗎? 我是不是想錯甚麼了?