簡體   English   中英

Visual C ++查找導致“Debug Assertion failed”的行

[英]Visual C++ find line causing “Debug Assertion failed”

我試圖讓一個C ++程序在使用gcc編譯時工作正常,以便在Visual C ++上正常工作。 我的問題是我現在收到以下錯誤:

Debug Assertion Failed!

Program: C:\WINDOWS\SYSTEM32\MSVCP110D.dll
File: c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector
Line: 1140

Expression: vector subscript out of range

我真正的問題是我不知道何時或何地發生這種情況。 通過在錯誤窗口中按下break,我只會被帶到最終發生異常的vector類的部分。 我想在我的應用程序中找到實際引起它的地方。 我設法將其縮小到這段代碼:

    for(unsigned int i=0;i<openPolygonList.size();i++)//error somewhere in here
    {
        if (openPolygonList[i].size() < 1) continue;
        for(unsigned int j=0;j<openPolygonList.size();j++)
        {
            if (openPolygonList[j].size() < 1) continue;

            Point diff = openPolygonList[i][openPolygonList[i].size()-1] - openPolygonList[j][0];
            int64_t distSquared = vSize2(diff);

            if (distSquared < 2 * 2)
            {
                if (i == j)
                {
                    polygonList.push_back(openPolygonList[i]);
                    openPolygonList.erase(openPolygonList.begin() + i);
                }else{
                    for(unsigned int n=0; n<openPolygonList[j].size(); n++)
                        openPolygonList[i].push_back(openPolygonList[j][n]);

                    openPolygonList[j].clear();
                }
            }
        }
    }

簡單地在每個使用向量的行放置斷點不是一個選項,因為循環迭代數千次並且每次按下繼續將花費我幾個小時。 一旦發生錯誤,有什么辦法可以告訴調試器在適當的線路上制動。 它可以幫助我檢查變量並確定哪個變量超出范圍?

調試器無法預測未來,但您可以告訴它打破所有異常,(ctrl + atl + e並勾選“Thrown”下的所有框)。 當斷言發生時,將調用堆棧向下移動到您的代碼,它將告訴您導致問題的是哪一行。

我認為問題是你正在擦除你正在迭代的向量的成員。 如果刪除第一個元素會發生什么?

i 1 2 3 Ei v1 v2 v3

如果我們在i = 1時擦除1,我們的向量索引和值低於現在i = 2。

我1 2 Ei v2 v3

最終,我認為你可以遍歷向量的末尾,導致你有一個指向越過向量末尾的指針。 完成猜測工作,但可能有一種更簡單的方法來做你想做的事情。 我無法弄清楚你想要做什么。

看起來你正試圖反轉二維數組的行和列,同時將數組中的對角線多邊形存儲到一個新數組中。 無論如何,是的,但是在for循環的開頭有一個紅色圓圈,逐行遍歷你的代碼。

我會創建臨時向量,然后在for循環中修改那些,然后替換向量openPolygonList。

您可以打開調用堆棧窗口(Debug-> windows-> CallStack)並在程序中找到導致斷言的位置。 它應該在頂行下方2或3行。

暫無
暫無

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

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