為什麼會出現"Access violation"錯誤訊息?? |
答題得分者是:andychang1690
|
jakie720313
一般會員 發表:15 回覆:7 積分:4 註冊:2003-11-23 發送簡訊給我 |
下面的程式是在一張圖片上,以一個8*8的mask來搜尋整張圖的各個顏色的分布情形,目的是要計算出每個顏色在這張圖片上共出現幾次,在mask裡面只計算有哪些顏色出現過,如果同樣的顏色重複出現也只算一次~~
我的問題在於要紀錄顏色值的陣列,當8*8mask追蹤完64的點,x座標就會往右移動一格,必須把儲存顏色值得陣列初使化為0,但是我要初使化時卻出現錯誤???
就是以下的這兩行:
for(m=0;m<256;m ) TempTable[m]=0;假如沒有加這2行程式碼,程式執行就沒有錯誤發生,加了之後反而會出現 "Access violation......"的錯誤訊息~ 以下這一行被Debugger用一條藍色匡住,顯示這裡有錯...請問錯在哪呢??? ColorTable[m]=ColorTable[m] 1;請教各位大大如何改正錯誤????謝謝~~ //==================================================================// //我只有列出搜尋圖片的顏色分布情形的演算法// #define K 1 #define E 8*K int TempTable[256],ColorTable[256],value[256]; int i,j,x,y,r,g,b,m,k=0; Byte *ptr; for(m=0;m<256;m ) { ColorTable[m]=0; TempTable[m]=0; value[m]=0; } Graphics::TBitmap *bmp = new Graphics::TBitmap(); bmp->Assign(Image2->Picture->Bitmap); bmp->PixelFormat=pf24bit; for(j=0;j〈bmp->Height-E 1;j =K) { ptr=(Byte *)bmp->ScanLine[j]; for(i=0;i〈bmp->Width-E 1;i =K) { for(m=0;m<256;m ) //重新初使化 TempTable[m]=0; for(y=j;y〈j E;y =K) //mask的外圍 for(x=i;x〈i E;x =K) { r=ptr[i*3 2]; g=ptr[i*3 1]; b=ptr[i*3]; m=0.299*r 0.587*g 0.114*b; if(TempTable[m]==0) //避免重複 { TempTable[m]=TempTable[m] 1; value[k]=m; k ; } } for(m=0;m<256;m ) if(TempTable[m]>0) //計算顏色的個數 ColorTable[m]=ColorTable[m] 1; } }發表人 - jakie720313 於 2004/08/24 07:15:14 發表人 - taishyang 於 2004/08/24 09:13:16 |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
jakie720313: 問題不在你說的地方而是 value[256]-->你宣告256 if(TempTable[m]==0) //避免重複 { TempTable[m]=TempTable[m] 1; value[k]=m; k ; // k值會大於256 } 你好好檢查你的程式你可以放一個Label if (k < 256) value[k]=m; k ; Label1->Caption=k; Application->ProcessMessages(); 看看數值變化!Andy Chang
------
Andy Chang |
jakie720313
一般會員 發表:15 回覆:7 積分:4 註冊:2003-11-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |