線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:741
推到 Plurk!
推到 Facebook!

為什麼會出現"Access violation"錯誤訊息??

答題得分者是:andychang1690
jakie720313
一般會員


發表:15
回覆:7
積分:4
註冊:2003-11-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-24 06:40:00 IP:218.168.xxx.xxx 未訂閱
下面的程式是在一張圖片上,以一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-24 09:04:06 IP:219.130.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-25 00:46:20 IP:218.168.xxx.xxx 未訂閱
謝謝 Andy~ 我把 value[k]=m; k ; 這兩行去掉之後就可以跑ㄌ~ k的值真的會超過256ㄟ...所以出現錯誤~~ 我的問題解決了...謝謝^^
系統時間:2024-05-21 0:09:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!