簡體   English   中英

CPtrList-> RemoveHead()如何導致CInvalidArgumentException?

[英]How can a CPtrList->RemoveHead() cause an CInvalidArgumentException?

這個問題與上一個問題非常相似,這次我想更加了解這個主題,或者至少是它的文檔:

我正在處理由於CInvalidArgException導致的進程崩潰,同時執行了包含6個條目的CPtrList對象的RemoveHead()

錯誤的源代碼如下所示:

pSingle = (SET_PARAMETER*)plMultiple->RemoveHead();

調用堆棧如下:

mfc110u.dll!AfxThrowInvalidArgException(void)
mfc110u.dll!CObList::RemoveHead(void)
Application.exe!SingleThread(void * pArg=0x0000006800000000) Line 673

為了了解正在發生的事情,我看了有關CPtrList(CObList)RemoveHead()的官方Microsoft文檔網站 ,但沒有找到對CInvalidArgException引用。

只是作一下比較:對於Java程序員,有一個文檔說明了您在編程時可能遇到的每個異常(例如, 官方文檔中提到了所有異常,這些異常可能在執行方法時拋出)。

我想知道C ++(STL)程序員是否有類似的東西?

提前致謝

檢查CObList的源代碼,我們看到第一行是:

ENSURE_VALID(this);

該宏定義為:

#define ENSURE_VALID(pOb)   ENSURE_VALID_THROW(pOb, ::AfxThrowInvalidArgException() )

依次定義為:

#define ENSURE_VALID_THROW(pOb, exception)  \
do { ASSERT_VALID(pOb); if (!(pOb)){exception;} } while (false)

換句話說,它將在調試模式下引發斷言,而在發布模式下,它將調用AfxThrowInvalidArgException ,這正是您所看到的。

簡而言之, plMultiple為空。

暫無
暫無

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

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