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

如何釋放記憶體?

尚未結案
kikikaka
一般會員


發表:32
回覆:28
積分:12
註冊:2003-09-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-08 17:00:23 IP:59.121.xxx.xxx 未訂閱
請問各位高手: 小弟以下的寫法,有正確的釋放記憶體嗎? 謝謝大家的幫忙!  
 
byte **tNow, **tNext;    Graphics::TBitmap *pBitmap3=new Graphics::TBitmap;
Graphics::TBitmap *pBitmap4=new Graphics::TBitmap;    pBitmap3->Assign(Image3->Picture->Bitmap);
pBitmap4->Assign(Image4->Picture->Bitmap);    tNow= new byte*[pBitmap3->Height];
tNext= new byte*[pBitmap4->Height];
for (int z = 0; z < pBitmap3->Height; z  )
{
  tNow[z] = new byte[pBitmap3->Width];
  tNext[z] = new byte[pBitmap4->Width];
}    //釋放記憶體
for(int y = 0; y < pBitmap3->Height; y  )
{
  delete tNow[y], tNext[y];
}
delete pBitmap3, pBitmap4, tNow, tNext;
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-08 18:21:29 IP:140.129.xxx.xxx 未訂閱
kikikaka 您好:    您釋放記憶體的順序沒錯。    動態陣列記憶體的釋放,要加上[]: delete [] pointer2Array; 另外您給了個有趣的寫法: delete ptr1, ptr2; 但它是否完全正確,我沒有十成的把握。所以為了保險起見,我會寫成: delete ptr1; delete ptr2; 如果是陣列,那我就更沒有把握了, delete [] ptrArray1, ptrArray2; 是否與下列宣告全等? delete [] ptrArray1; delete [] ptrArray2;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  byte **tNow, **tNext;      Graphics::TBitmap *pBitmap3=new Graphics::TBitmap;
  Graphics::TBitmap *pBitmap4=new Graphics::TBitmap;      pBitmap3->Assign(Image1->Picture->Bitmap);
  pBitmap4->Assign(Image1->Picture->Bitmap);      tNow= new byte*[pBitmap3->Height];
  tNext= new byte*[pBitmap4->Height];
  for (int z = 0; z < pBitmap3->Height; z  )
  {
    tNow[z]  = new byte[pBitmap3->Width];
    tNext[z] = new byte[pBitmap4->Width];
  }      //釋放記憶體
  for(int y = 0; y < pBitmap3->Height; y  )
  {
    delete [] tNow[y];
    delete [] tNext[y];
  }
  delete  pBitmap3;
  delete  pBitmap4;
  delete [] tNow;
  delete [] tNext;
}
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
kikikaka
一般會員


發表:32
回覆:28
積分:12
註冊:2003-09-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-09 11:14:41 IP:59.121.xxx.xxx 未訂閱
真是太感謝RichTop 大大的回答。 這樣子我了解了。 謝謝各位幫忙!
kikikaka
一般會員


發表:32
回覆:28
積分:12
註冊:2003-09-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-09 12:21:33 IP:59.121.xxx.xxx 未訂閱
不好意思,才剛結案,又想到一個相關問題,請各位高手解惑! 想請問以下兩種寫法的差異,以及在釋放記憶體方面,是否有何不同? 謝謝各位幫忙!    1.
  byte **ptr1;       Graphics::TBitmap *pBitmap1=new Graphics::TBitmap;   
  pBitmap1->Assign(Image1->Picture->Bitmap);          ptr1 = new byte*[pBitmap1->Height];     
  for (int y = 0; y < pBitmap1->Height; y  )
  {
    ptr1[y] = (Byte *)pBitmap1->ScanLine[y];        
  }
2.
  byte  **ptr2; 
  
  Graphics::TBitmap *pBitmap2=new Graphics::TBitmap;     
  pBitmap2->Assign(Image2->Picture->Bitmap);          ptr2 = new byte*[pBitmap2->Height];   
  for (int y = 0; y < pBitmap2->Height; y  )
  {        
    ptr2[y] = new byte[pBitmap2->Width];
  }     
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-09 17:03:32 IP:211.76.xxx.xxx 未訂閱
引言: 不好意思,才剛結案,又想到一個相關問題,請各位高手解惑! 想請問以下兩種寫法的差異,以及在釋放記憶體方面,是否有何不同? 謝謝各位幫忙! 1.
  byte **ptr1;       Graphics::TBitmap *pBitmap1=new Graphics::TBitmap;   
  pBitmap1->Assign(Image1->Picture->Bitmap);          ptr1 = new byte*[pBitmap1->Height];     
  for (int y = 0; y < pBitmap1->Height; y  )
  {
    ptr1[y] = (Byte *)pBitmap1->ScanLine[y];        
  }

  //ptr1指向一個大小為pBitmap1->Height,型態是byte*的動態陣列,
    同時它的每一個元素分別指向某一已經存在的記憶體區塊,所以
    最後需要釋放的記憶體:
    delete [] ptr1;      
2.
  byte  **ptr2; 
  
  Graphics::TBitmap *pBitmap2=new Graphics::TBitmap;     
  pBitmap2->Assign(Image2->Picture->Bitmap);          ptr2 = new byte*[pBitmap2->Height];   
  for (int y = 0; y < pBitmap2->Height; y  )
  {        
    ptr2[y] = new byte[pBitmap2->Width];
  }

  //ptr2指向一個大小為pBitmap2->Height,型態是byte*的動態陣列,
    同時它的每一個元素分別又指向動態配置的記憶體區塊(原先不存在),
    所以,最後需要釋放的記憶體:
    for (int y = 0; y < pBitmap2->Height; y  )
       {        
         delete [] ptr2[y];
       }
   delete [] ptr2;       
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
系統時間:2024-05-19 15:24:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!