gpt4 book ai didi

c++ - Visual C++ 查找导致 "Debug Assertion failed"的行

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:34 25 4
gpt4 key购买 nike

我正在尝试获得一个 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();
}
}
}
}

简单地在使用 vector 的每一行放置断点不是一种选择,因为循环迭代了数千次并且每次都必须按继续将真正花费我几个小时。一旦发生错误,我有什么办法可以告诉调试器在适当的线路上刹车。它可以帮助我检查变量并确定哪个变量超出范围?

最佳答案

我认为问题在于您正在删除正在迭代的 vector 的成员。如果你删除第一个元素会发生什么?

我 1 2 3EI v1 v2 v3

如果我们在 i = 1 时删除 1,我们的 vector 索引和值低于现在 i = 2。

我 1 2EI v2 v3

最终,我认为您可以遍历 vector 的末尾,从而使您拥有一个指向 vector 末尾的指针。在这里完成猜测工作,但可能有一种更简单的方法来做你想做的事情。我只是不知道你想做什么。

看起来您正在尝试反转二维数组的行和列,同时将数组中的对角多边形存储到新数组中。无论如何,是的,但是在 for 循环的开头有一个红色圆圈,并逐行遍历您的代码。

我会创建临时 vector ,然后在 for 循环中修改这些 vector ,然后替换 vector openPolygonList。

关于c++ - Visual C++ 查找导致 "Debug Assertion failed"的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17279187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com