一千萬個為什麽

搜索

為什麽編譯器沒有在C ++ Builder中編譯一行?

我在C ++ Builder 6中編寫了一個應用程序,我遇到了這個罕見的問題:

void RotateDice()
{
  Graphics::TBitmap *MYbitmap = new Graphics::TBitmap();

  Randomize();
  int rn = random(6) + 1;

  switch (rn)
  {
    case 1:
    {
        //...
        break; 
    }
    //...  Some cases...
  }

  ShowDice();  //it's a function to show the dice
  delete MYbitmap;   //the compiler don't get it!!!!
}

在“ShowDice()”行中,編譯器跳轉到RotateDice()方法的最後,它沒有“看到”行“刪除MYbitmap”。當我編譯程序時,每個編譯的行在其左側顯示一個小藍點,但該行不顯示藍點......這就像編譯器不“看到”代碼行。發生了什麽????

註意:幾天前,我正在Delphi中編寫一個程序,我對這個有問題的問題提出了建議。有些像在Delphi 7中發生的那樣...那麽,問題就是這樣嗎?

我很抱歉我的英語。我來自古巴。

最佳答案

由於 ShowDice(); 調用不依賴於 MYbitmap 變量,因此編譯器可以自由地重新排序最後兩個語句。這可能解釋了為什麽你沒有“命中”調試器中的行。停用優化,然後重試。

另外,我可以建議使用一些 RAII 包裝,如 std :: auto_ptrboost :: scoped_ptr 而不是手動內存管理?

轉載註明原文: 為什麽編譯器沒有在C ++ Builder中編譯一行?