關於動態配置大量記憶體 |
尚未結案
|
s842103
一般會員 發表:1 回覆:1 積分:0 註冊:2005-05-18 發送簡訊給我 |
如果我的問題太蠢了,就用力的踢我踹我巴! 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 發送簡訊給我 |
|
GeorgeKu
中階會員 發表:1 回覆:120 積分:74 註冊:2004-10-13 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |