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

執行時出現"EOutOfResources"錯誤訊息

尚未結案
jakie720313
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-03 03:32:19 IP:218.168.xxx.xxx 未訂閱
請教各位大大如何解決呢??我的程式跑到一半就當掉了.... 然後就會出現"out of system resources"的錯誤訊息~~ 請問該如何修改呢??謝謝~
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-03 09:42:03 IP:220.135.xxx.xxx 未訂閱
引言: 請教各位大大如何解決呢??我的程式跑到一半就當掉了.... 然後就會出現"out of system resources"的錯誤訊息~~ 請問該如何修改呢??謝謝~
你好, 可不可以請你把程式片段貼上來,單純說有問題,實在很難幫你呢~~ 貼程式,請按照版規的說明貼上來,謝謝合作。 版規 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=47262 發表人 - jerrykuo 於 2004/11/03 11:26:40
jakie720313
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-03 15:57:56 IP:218.168.xxx.xxx 未訂閱
sorry~~以下是程式片段    
 
int *block_diff=new int[100];
int *block_minium=new int[100];
int *large=new int[33280000];    //這裡宣告成這樣會有問題嗎??
double max(double a,double b)
{
  if(a>b)
   return a;
  else
   return b;
}
double min(double c,double d)
{
  if(c>d)
   return d;
  else
   return c;
}
int find_min(int *test)
{
    int i,j,temp;
    test = new int[100];        for(i=0;i<99;i  )
      for(j=i 1;j<100;j  )
        {
            if(test[i]>test[j])
              {
                 temp=test[i];
                 test[i]=test[j];
                 test[j]=temp;
              }
        }          return test[0];    }
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
         int i,j,x,y,S,m,temp,page,count=1;
         int block,width_block,height_block;
         int Dif,index;
         int *TempTable=new int[256];
         int *ColorTable=new int[256];
         int **HMMD_Structure;
         double Hue,Max,Min,Sum;
         double r,g,b;
         Byte *ptr;
         HMMD_Structure=new int*[400];           for(i=0;i<400;i  )
         HMMD_Structure[i]=new int[400];           for(i=0;i<400;i  )
         for(j=0;j<400;j  )
           HMMD_Structure[i][j]=0;        for(page=0;pageLoadFromFile(ListBox1->Items->Strings[page]);
         Graphics::TBitmap *bmp=new Graphics::TBitmap;
         bmp->Assign(jpg);
         bmp->PixelFormat=pf24bit;           for(int block_i=0;block_i<10;block_i  )
         {
           for(int block_j=0;block_j<10;block_j  )
            {
               TRect   MyFix, MySource;
               width_block=bmp->Width/10;
               height_block=bmp->Height/10;
               MyFix = Rect(0,0,width_block,height_block);
               MySource = Rect(block_i*width_block,
                               block_j*height_block,
                               (block_i 1)*width_block,
                               (block_j 1)*height_block); // 打算取原圖的區域
               // 如前述方法,把這個區塊自原圖取出
               Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
               Bitmap->Width=width_block;
               Bitmap->Height=height_block;
               Bitmap->Canvas->CopyRect(MyFix,bmp->Canvas, MySource);        for(m=0;m<256;m  )    //初始化陣列
      {
          ColorTable[m]=0;
          TempTable[m]=0;
      }
//--------------------------------轉成HMMD------------------------------------//        for(j=0;jHeight;j  )
     {
      ptr=(Byte *)Bitmap->ScanLine[j];
      for(i=0;iWidth;i  )
       {                 r=ptr[i*3 2]/255.0;
             g=ptr[i*3 1]/255.0;
             b=ptr[i*3]/255.0;
          //   ShowMessage("R:" FloatToStr(r));
          //   ShowMessage("G:" FloatToStr(g));
          //   ShowMessage("B:" FloatToStr(b));                 Max=max(max(r,g),b);
             Min=min(min(r,g),b);
             Dif=(int)((Max-Min)*255.0);
             Sum=(Max Min)/2.0;             if(Max!=Min)
          {
            if((Max==r) && (g > b))
                Hue = 60.0*(g-b)/(Max-Min);
            else
             {
               if((Max==r) && (g < b))
                   Hue = 360 60*(g-b)/(Max-Min);
               else
                {
                   if(g==Max)
                      Hue = 60*(2.0 (b-r)/(Max-Min));
                   else
                      Hue = 60*(4.0 (r-g)/(Max-Min));
                }
             }                 if(Sum != 1.0)
               {
                  if(Dif < 6)
                    {
                       index=(int)(Sum*32.0);
                //       ShowMessage(IntToStr(index));
                    }
                  else if(Dif < 20)
                    {
                      index=32 ((int)(Hue/90.0)*8) (int)(Sum*8.0);
                //      ShowMessage(IntToStr(index));
                    }
                  else if(Dif < 60)
                     {
                      index=64 ((int)(Hue/22.5)*4) (int)(Sum*4.0);
                //      ShowMessage(IntToStr(index));
                     }
                  else if(Dif < 110)
                     {
                      index=128 ((int)(Hue/22.5)*4) (int)(Sum*4.0);
                //      ShowMessage(IntToStr(index));
                     }
                  else
                     {
                       index=192 ((int)(Hue/22.5)*4) (int)(Sum*4.0);
                //       ShowMessage(IntToStr(index));
                     }
               }
             else
              {
                  if(Dif < 6)
                     index=31;
                  else if(Dif < 20)
                     {
                       index=32 ((int)(Hue/90.0)*8) 7;
                //       ShowMessage(IntToStr(index));
                     }
                  else if(Dif < 60)
                     {
                       index=64 ((int)(Hue/22.5)*4) 3;
                //       ShowMessage(IntToStr(index));
                     }
                  else if(Dif < 110)
                     {
                       index=128 ((int)(Hue/22.5)*4) 3;
                //       ShowMessage(IntToStr(index));
                     }
                  else
                     {
                       index=192 ((int)(Hue/22.5)*4) 3;
                //       ShowMessage(IntToStr(index));
                     }
              }                      HMMD_Structure[i][j]=index;           }
     }
   }
//----------------------------------------------------------------------------//             for(j=0;jHeight-E 1;j =K)             //計算所有灰階值的總數
           {
              ptr=(Byte *)Bitmap->ScanLine[j];
              for(i=0;iWidth-E 1;i =K)
                {
                     for(m=0;m<256;m  )
                         TempTable[m]=0;                       for(y=j;y256)
                         {
                           ShowMessage(IntToStr(x));
                           ShowMessage(IntToStr(y));
                           ShowMessage(IntToStr(m));
                           TempTable[m]  ;
                         }                             TempTable[m]  ;
                       }                       for(m=0;m<256;m  )
                      if(TempTable[m]>0)
                        ColorTable[m]  ;                   }
          }                S=((Bitmap->Width - E K)/K)*((Bitmap->Height-E K)/K);
            for(m=0;m<256;m  )
               ColorTable[m] = ColorTable[m]*20000/S;       //         for(i=0;i<256;i  )
   //           {
   //             ListBox2->Items->Add(IntToStr(ColorTable[i]));
   //           }                  for(i=256*(count-1),j=0;i<(256*count)-1,j<256;i  ,j  )
                     {
                        large[i]=ColorTable[j];     //或許是這裡有錯
                     }                            count  ;             Form1->CGauge1->Progress=(page 1)*100/number;
         Sleep(10);
         Application->ProcessMessages();           }         }       }             ShowMessage("輸出完成!");    }
請問大大是哪裡造成出現EOutOfResources錯誤訊息呢?? ps.因為我剛剛要回應文章的時候一直出現網站伺服器的問題 以為PO的文章沒PO成功,所以一直重試,後來成功了才發現 之前以為沒PO成功但其實是網站延遲的問題,伺服器有點問題 所以才延遲了,在這跟大大說抱歉~~ 我回應的文章裡面的程式碼都是一樣的~~~ 以最後一篇回應的為準~~ 發表人 - jakie720313 於 2004/11/03 16:08:10 發表人 - jerrykuo 於 2004/11/03 16:45:52
shocheng
一般會員


發表:0
回覆:1
積分:0
註冊:2003-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-04 17:13:39 IP:61.66.xxx.xxx 未訂閱
BitMap在windows中有大小的限制,跟你的虛擬記憶體,顯示卡的等級以及解析度有關,我猜是你的BitMap檔超過限制,你可以測看看create一個bitmap,然後一直加大這個bitmap的height跟width,大到一個程度就會跳出這個訊息,我不會c,但是我在delphi遇過這個問題,底下是我測的程式碼,我的硬體是P4 2.4G,512mb的ram,顯示卡64mb,可以跑到8192*8192,不一定很準,但是差不多是那個數據,你參考看看 procedure TForm1.Button6Click(Sender: TObject); var bmp : tbitmap; i : integer; begin memo1.Clear; try i := 1; repeat bmp := tbitmap.Create; i := i * 2; bmp.PixelFormat := pf24bit; bmp.Height := i; bmp.Width := i; memo1.Lines.Add('i:' inttostr(i)); bmp.SaveToFile('24bit.bmp'); image1.Picture.Assign(bmp); bmp.Free; until i > 65536; except begin memo1.Lines.Add('except:' inttostr(i)); bmp.Free; end; end; end;
jakie720313
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-05 20:06:50 IP:218.168.xxx.xxx 未訂閱
我把問題拿給助教看之後,助教檢查了一下才發現我宣告太多次同樣的動態陣列, 但是都沒有把它delete掉,導致超過系統負荷~~~ 所以,後來把以下兩行拿到迴圈外面,然後在最後面把動態宣告的陣列歸還給系統 程式就可以跑了~~    Graphics::TBitmap *bmp=new Graphics::TBitmap; Graphics::TBitmap *Bitmap = new Graphics::TBitmap; 呼~~終於解決嚕....感謝各位的指導~~
系統時間:2024-06-13 15:06:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!