c++ - 为什么在即时窗口中执行 iterator->end() 会导致读取访问冲突,即使迭代器在范围内 - 对于 C++ vector::iterator?
问题描述
我有以下程序:
int main()
{
vector<vector<int> > vv;
vector<int> v1;
vector<int> v2;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v2.push_back(10);
v2.push_back(20);
v2.push_back(30);
vv.push_back(v1);
vv.push_back(v2);
for (vector<vector<int> >::iterator it = vv.begin(); it != vv.end(); it++)
{
for (vector<int>::iterator col = it->begin(); col != it->end(); col++)
{
cout << *col << " ";
} //<------- when the instruction pointer is here, and I type it->end() in the immediate window, I get correct result in the immediate window, but then after doing an F10 or F11, I get a read access violation.
cout << endl;
}
return 0;
}
当我只it->end()
在即时窗口中执行操作时,为什么会出现读取访问冲突(我只是在读取 的值,it->end()
在这种特定情况下这不应该给我造成读取访问冲突)?请注意,迭代器it
在此处的范围内,并且it->end()
在立即窗口中执行会给出以下正确结果:
it->end()
{-33686019}
[ptr]: 0x010ce02c {-33686019}
[Raw View]: {...}
到目前为止一切都很好。但是,接下来,当我执行 F11 或 F10 以转到下一条指令时,我在文件中遇到读取访问冲突 - C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC \14.22.27905\include\ xmemory。
正如上图中的异常所说(异常在文件xmemory的第 1286 行引发):
Exception thrown: read access violation.
_Pnext was 0xCCC35DE9.
显然,0xCC 表示_Pnext
未初始化。因此,*_Pnext
在第 1286 行执行会导致读取访问冲突。
我的问题是,it->end()
在退出 while 循环之前,我只是在即时窗口中完成了一个操作 - 如上面的 main() 程序所示。并且,迭代器it
当时在范围内。it->end()
在即时窗口中执行也给了我正确的结果:
it->end()
{-33686019}
[ptr]: 0x010ce02c {-33686019}
[Raw View]: {...}
那么,为什么在那之后执行 F10 会导致文件xmemory中第 1286 行的读取访问冲突?
请参阅:在 main() 程序中,我已经标记了右大括号 - } - 遇到异常的地方。当内部循环完全执行时,指令指针到达这个右括号。之后按 F10 或 F11,指令指针转到下一条语句cout << endl;
- 如果在立即窗口中没有键入任何内容。此外,如果我只运行 main() 程序而不进行调试(也就是说,没有按照我在这里展示的方式进行调试),程序执行得很好,输出正确。另请注意,当内循环没有完全执行时(即当没有遇到内循环的右大括号 - } - 时),我执行it->end()
在即时窗口中 - 我在即时窗口中得到正确的结果。而且,我可以按 F10 或 F11 一直前进到最后。main() 程序输出正确的结果。
编译器和操作系统详细信息:Microsoft Visual Studio Enterprise 2019(版本 16.2.1)。我正在构建 x86 调试。64 位操作系统,基于 x64 的处理器。Windows 版本 = Windows 10 专业版。
解决方案
推荐阅读
- java - 在 Java 8 中使用 stream() 到达 json 中的元素
- java - 如何创建包含所有 Maven 依赖项的不可执行 JAR 文件
- javascript - 在返回 JSON 对象之前在 MongoDB(猫鼬)中进行多个查询
- apache - Apache 中的 403 访问拒绝无法访问 ErrorDocument 403
- python - Wand - 如何使用 Python 更改和替换现有图像文件
- javascript - 开玩笑测试模拟函数返回未定义(创建反应应用项目)
- python - 尝试以 .format 进行数学运算
- spring-boot - 我可以为 FileWritingMessageHandler 提供自定义 FileLocker 吗?
- r - 创建一个应用多个条件的新列
- swift - 在新的 ViewController 中显示 CollectionView 单元格图像 - 图像未加载 - Firebase / Swift