全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:940
推到 Plurk!
推到 Facebook!

關於動態配置大量記憶體

尚未結案
s842103
一般會員


發表:1
回覆:1
積分:0
註冊:2005-05-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-18 14:31:03 IP:61.61.xxx.xxx 未訂閱
如果我的問題太蠢了,就用力的踢我踹我巴! PS 我沒有被虐狂啦!新手上路多多指教! 我遇到的問題是需要在程式中配置大量的動態記憶體(約300M)以處理約1000張由CCD(640*480)抓取的資料,但是前幾次都OK,但是經過幾次new,delet的程序後接下來就配不進去了,於是程式會跳進預設的set_new_handler(noMoreMemory);裡面,但是接下來除了跳出程式也不知該如何處理,所以想請高人指點一下! 我的程式碼如下:    byte         *RawData      = NULL; int WP = 640; int HP = 480;    void __fastcall TFormAnalyse::loadrawdata1Click(TObject *Sender) {        FILE *fH;     String fN;          if(OpenDialog1->Execute()!=NULL)     {         fN = OpenDialog1->FileName;         fH = fopen(fN.c_str(),"rb");     }     if(fH!=NULL)     {          set_new_handler(noMoreMemory);         if(RawData==NULL)         RawData = new byte[WP*HP*1000];                  int a;         a=feof(fH);         length=0;         while (a==0)         {          fread(RawData+WP*HP*length,abs(WP*HP),1,fH);          length++;          a=feof(fH);         }         fclose(fH);      }   } void noMoreMemory() {   cerr << "Unable to satisfy request for memory\n";   abort();      //經過幾次load & release後就會跳到這裡來,                 //但是系統看起來並沒有記憶體不足的現象啊?                 //我是從Windows工作管理員那邊看的啦! }    void __fastcall TFormAnalyse::rel1Click(TObject *Sender)    {  if(RawData!=NULL) delete[] RawData;  RawData=NULL;     }    謝謝指點!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-18 16:38:14 IP:221.169.xxx.xxx 未訂閱
可能是回收問題吧。 你要那樣玩。就自己一開始就配一大塊下來。 自己切割成幾份。 以後自己去看那一份沒用到就去把資料放在那邊。 不用了就自己清成0 等程式不用了。才把這一大塊還系統。
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-18 17:07:50 IP:61.228.xxx.xxx 未訂閱
s842103,    如果單從你PO出來的CODE去看的話應該沒有問題,我先簡化你的CODE去做試驗並模擬你的方式,但是不會有你說的結果,你可以在你的系統上試驗看看是否會出現你說的問題.
byte *RawData = NULL;
int WP = 640;
int HP = 480;
void noMoreMemory();    void __fastcall TForm1::Button1Click(TObject *Sender)
{
   set_new_handler(noMoreMemory);
   if (RawData==NULL)
   RawData=new byte[WP*HP*1000];
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   if(RawData!=NULL)
   delete []RawData;
   RawData=NULL;
}
void noMoreMemory()
{
   Form1->Label1->Caption="Error";
   abort();
}
s842103
一般會員


發表:1
回覆:1
積分:0
註冊:2005-05-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-23 07:45:58 IP:61.61.xxx.xxx 未訂閱
GeorgeKu     謝謝您幫我做了測試,我自己也測試了一遍,真的沒有問題ㄟ,有點莫名奇妙,所以問題可能是出在別的程式碼,只好慢慢把CODE加回去看看加到哪後會爆吧,總之謝謝啦!
系統時間:2024-06-16 16:17:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!