2010-07-14 187 views
-1

這是我在stackoverflow上的第一個問題。在C++中調試斷言失敗

我試圖調試程序,但是當我嘗試運行它,它與錯誤訊息終止 調試斷言失敗,當我重新嘗試調試它一個突破點創建了帶我到 向量在這個函數

#if _HAS_ITERATOR_DEBUGGING 
_Vector_const_iterator(_Tptr _Ptr, const _Container_base *_Pvector) 
    { // construct with pointer _Ptr 
    _SCL_SECURE_VALIDATE(_Pvector == NULL || (((_Myvec *)_Pvector)->_Myfirst <= _Ptr && _Ptr <= ((_Myvec *)_Pvector)->_Mylast)); 
    this->_Adopt(_Pvector); 
    _Myptr = _Ptr; 
    } 

這行

_SCL_SECURE_VALIDATE(_Pvector == NULL || (((_Myvec *)_Pvector)->_Myfirst <= _Ptr && _Ptr <= ((_Myvec *)_Pvector)->_Mylast)); 

請建議,其中的問題可能是,在哪裏看。這是我使用的迭代器的一些問題。

謝謝

+4

您應該發佈導致此斷言的調用的代碼。 – bshields 2010-07-14 19:26:42

+0

你好。在編輯器中有零按鈕和一個將選擇格式化爲代碼的按鈕 – Anycorn 2010-07-14 19:27:57

回答

0

你可以發佈你的觸發這個錯誤的代碼嗎?看起來他們的調試檢查(可能的界限或類似的)失敗了,但是隻有當函數的輸入有問題時,該斷言纔會失敗。爲了讓我們更好地爲您提供幫助,我們需要查看調用此行爲的代碼。

2

我想你應該發佈您的代碼,而不是STL斷言代碼(顯然這個人是不是最簡單的調查:)

無論如何,這種說法消息通常表明嘗試訪​​問錯誤的索引(超出範圍)或者在您的std::vector或其周圍的一些包裝中類似的寫入操作。

如果您存儲迭代器,例如在插入序列之後失效,則也可能導致這種情況。