2015-04-06 132 views
-2

以下代碼會導致MSVC在調用方法vector :: empty時在stl vector類中拋出訪問衝突讀取位置。當我查看vector類中的數據時,它說它無法讀取關於大小,容量,尺寸和「[]」變量的內存,並且原始視圖是內存地址0xcdcdcdcd。內存訪問衝突讀取位置調用std :: vector :: empty()時

~Statement_Block(){ 
    if (!statements.empty()){//throws exception 
     for (auto s : statements){ 
      if (s){ 
       delete s; 
      } 
     } 
    } 
} 
+0

VS調試器使用'0xcdcdcdcd'模式表示未初始化的內存。所以在我看來,被破壞的對象還沒有被構建,或者之前已經被破壞過。您可以創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們展示? – 2015-04-06 12:57:00

+1

我的猜測是某處'Statement_Block'要麼被銷燬兩次,要麼沒有正確初始化(甚至根本沒有初始化)。檢查你的代碼是否發生。 MSVC使用0xcdcdcdcd來標記未初始化的指針。 – 2015-04-06 12:57:25

回答

0

問題解決了,另一個函數返回一個動態分配的語句塊或一個nullptr。由於它返回nullptr,程序繼續並釋放所有內存。我假設所有指針都初始化爲nullptr和0xcdcdcdcd。因此,當我測試以查看指針是否指向某個有效的東西時,我在與其他東西相等的情況下針對nullptr進行了測試,並試圖將其刪除並引發異常。