簡體   English   中英

釋放std :: vector C ++的內存

[英]Free the memory of a std::vector C++

我有一個向量如下。

std::vector<std::string> exportNameList;

我通過使用push_back方法向其中添加元素。 但是我得到一個調試斷言為“

“ Windows在AxCent.exe中觸發了一個斷點。這可能是由於堆損壞所致,這表明AxCent.exe或其已加載的任何DLL中存在錯誤。

當它調用類的析構函數時會發生這種情況。 當我引用調用堆棧時,我被定向到向量類中的以下代碼塊。

~vector()
{   // destroy the object
    _Tidy();
}

我注意到刪除向量時出現錯誤。 我對么? 我該如何解決? 我已經提到了許多示例,但是尚未設法解決。 我對C ++很陌生。

非常感謝。

您可能正在破壞向量在其他地方使用的內存。

您遇到的錯誤可能與您的媒介沒有直接關系。 如果在調用向量的析構函數之前內存(堆)已損壞,則堆管理器此時可能僅檢測到破壞(釋放由向量動態分配的結構或內部動態分配的字符串)。

我認為,在Windows平台上處理此類錯誤的最佳方法是為程序激活“全頁堆”。

您可以通過2種方式執行此操作:

  • 使用“ Windows調試工具”中包含的gflag。 以管理員身份運行它,轉到“圖像文件”選項卡,在“圖像”字段(AxCent.exe)中輸入EXE的名稱,按TAB並選中“啟用頁面堆”,然后按“應用”
  • 或使用應用程序驗證程序。 通過“文件/應用程序”菜單選擇可執行文件,然后選中“基本/堆”,然后單擊“保存”。

每當啟動此應用程序時,將應用此設置。

然后在調試器(WindDbg或Visual Studio)下運行您的應用程序。 如果在刪除矢量之前內存已損壞,則調試器應在此時中斷。

當您完成對bug的跟蹤時,請不要忘記關閉“整頁堆”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM