誤操作:釋放棧上空間 Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
轉自:http://blog.csdn.net/woyaowenzi/article/details/5479367
誤操作:釋放棧上空間
錯誤現象:
原因:
從框中內容能大概看出:Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse), 說明是記憶體塊的型別不對, 什麼情況下會有這種問題呢? 試驗一下, 請看下面程式碼:
- void test(vector<int*>* vecptr)
- {
- if (vecptr != NULL)
- {
- int nSize = vecptr->size();
- for (int nIndex = 0; nIndex < nSize; ++nIndex)
- {
- delete vecptr->at(nIndex);
- vecptr->at(nIndex) = NULL;
- }
- delete vecptr;
- vecptr = NULL;
- }
- }
呼叫程式碼:
- vector<int*> vec;
- int* ptr = NULL;
- for (int nIndex = 0; nIndex < 5 ; nIndex++)
- {
- ptr = new int;
- *ptr = nIndex;
- vec.push_back(ptr);
- ptr = NULL;
- }
- test(&vec);
我們看到, vec這個變數是在棧上申請的, 是臨時的, 當傳入test函式之後, 依次釋放vector中的指標, 這是沒有問題的, 但是, 在最後一步,我們將vector本身刪除掉了, 這時, 這個錯誤就蹦出來了. 其原因很明顯, delete只能刪除堆上記憶體, 棧上的記憶體, 是不需要手動來釋放的, 因此, 程式會說記憶體塊的型別不對.
相關文章
- _BLOCK_TYPE_IS_VALID(pHead->nBlockUse問題解析BloC
- 如何釋放Mac空間?釋放Mac系統空間小技巧Mac
- oracle 釋放undo空間Oracle
- delete不釋放表空間delete
- Oracle資料庫高水位釋放——LOB欄位空間釋放Oracle資料庫
- lsof |grep deleted 釋放磁碟空間delete
- 禪道 - 儲存空間釋放
- DATAFILE SHRINK 釋放系統空間
- std::sort 錯誤"Expression : invalid operator <"Express
- SQLServer如何釋放tempdb臨時表空間SQLServer
- set unused 是否會釋放儲存空間
- win10怎麼釋放空間_win10釋放磁碟空間的方法Win10
- 順序棧、鏈棧基本操作
- RM刪除檔案空間釋放詳解
- Linux檔案刪除空間未釋放Linux
- hpux刪除檔案後空間不釋放UX
- Oracle 整理表碎片、釋放表的空間Oracle
- Oracle 釋放過度使用的Undo表空間Oracle
- 棧的基本操作
- 截斷表後空間不釋放的原因分析
- Mysql 刪除資料後為釋放物理空間MySql
- Linux 刪除檔案後空間不釋放Linux
- Linux rm掉檔案空間不釋放原因Linux
- 手把手帶你通過一番操作釋放伺服器 17G 磁碟空間伺服器
- oracle刪除(釋放)資料檔案/表空間流程Oracle
- java:模擬棧操作Java
- object dict cannot be used in await expression報錯解釋ObjectAIExpress
- OS 刪除temp表空間 而磁碟空間未釋放的解決方案
- 釋放ip埠
- Mysql InnoDB刪除資料後釋放磁碟空間的方法MySql
- App Cleaner & Uninstaller:釋放Mac空間,輕鬆管理應用APPMac
- Sqlserver delete表部分資料釋放資料檔案空間SQLServerdelete
- MongoDB Drop集合不釋放磁碟空間的解決辦法MongoDB
- Expression BlendExpress
- arm64 架構之入棧/出棧操作架構
- JAVA棧操作 Stack——不可不知的操作Java
- MySQL 5.7的表刪除資料後的磁碟空間釋放MySql
- 10、MySQL Case-釋放ibtmp表空間正確姿勢MySql