Visual C++ find line causing quot;Debug Assertion failedquot;(Visual C++ 查找导致“调试断言失败的行)
问题描述
I am trying to get a C++ program that works fine when compiled with gcc to work properly on Visual C++. My problem is that I am now getting the following error:
Debug Assertion Failed!
Program: C:WINDOWSSYSTEM32MSVCP110D.dll
File: c:program files (x86)microsoft visual studio 11.0vcincludevector
Line: 1140
Expression: vector subscript out of range
My real problem is that I do not know when or where this happens. By pressing break in the error window I am merely taken to the part of the vector class where the exception ultimately happened. I want to find the place in my application which actually caused it. I have managed to narrow it down to this block of code:
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();
}
}
}
}
Simply placing breakpoints at each line where a vector is used is not an option because the loop iterates thousands of times and having to press continue each time will literally take me hours. Is there any way I can tell the debugger to brake on the appropriate line once the error occurs. It can help me to inspect the variables and to determine which variable is out of range?
I think the problem is that you are erasing members of the vector you are iterating through. What happens if you erase the first element?
i 1 2 3 Ei v1 v2 v3
If we erase 1 when i = 1, our vector indices and values are below and now i = 2.
i 1 2 Ei v2 v3
Ultimately, I think you can iterate past the end of the vector causing you to have a pointer that points past the end of the vector. Complete guess work here, but there is probably an easier way to do what you're trying to do. I just can't figure out what you're trying to do.
It looks like you're trying to invert the rows and columns of a two dimensional array while storing the diagonal polygons int he array into a new array. Anyway, yes, but a red circle at the beginning of the for loop and walk through your code line by line.
I would create temp vectors and then modify those ones in the for loop and then replace the vector openPolygonList.
这篇关于Visual C++ 查找导致“调试断言失败"的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Visual C++ 查找导致“调试断言失败"的行


- C语言详解float类型在内存中的存储方式 2023-03-27
- ubuntu下C/C++获取剩余内存 2023-09-18
- C语言qsort()函数的使用方法详解 2023-04-26
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C++ 数据结构超详细讲解顺序表 2023-03-25
- Easyx实现扫雷游戏 2023-02-06
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Qt计时器使用方法详解 2023-05-30