[英]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種方式執行此操作:
每當啟動此應用程序時,將應用此設置。
然后在調試器(WindDbg或Visual Studio)下運行您的應用程序。 如果在刪除矢量之前內存已損壞,則調試器應在此時中斷。
當您完成對bug的跟蹤時,請不要忘記關閉“整頁堆”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.