循环忽略限制:如何处理这个损坏的 C++ 程序?
Loop ignores limits: How can I handle this corrupt c++ program?
当我执行我的程序时,它没有终止。我没有改变任何东西,它以前一直在工作。显然有问题,但我不明白是什么以及为什么。
在屏幕截图中您可以看到行
for ( size_t n = 0; n <= (size_t)maxState; n++ ) nodes.push_back(nullptr);
您还可以看到 maxState
是 -1,因此 (size_t)maxState
应该是 0。在图像的右侧,您可以看到 n 的值和 nodes
向量。
暂停执行后截图了。当我恢复时,它不会终止。我读过一些关于堆损坏的东西,但没有有效的解决方案。另外我不确定堆损坏是否是造成这种奇怪效果的真正原因。
我已经尝试清理和重建。
不要在这里乱搞size_t
。你没有提到 maxState
的实际类型,但如果它的值为 -1,那么它是 signed 类型。所以使用 signed 索引变量:
for (int i = 0; i < maxState; ++i)
当maxState
的值为负时,这将执行零次。
当我执行我的程序时,它没有终止。我没有改变任何东西,它以前一直在工作。显然有问题,但我不明白是什么以及为什么。
在屏幕截图中您可以看到行
for ( size_t n = 0; n <= (size_t)maxState; n++ ) nodes.push_back(nullptr);
您还可以看到 maxState
是 -1,因此 (size_t)maxState
应该是 0。在图像的右侧,您可以看到 n 的值和 nodes
向量。
暂停执行后截图了。当我恢复时,它不会终止。我读过一些关于堆损坏的东西,但没有有效的解决方案。另外我不确定堆损坏是否是造成这种奇怪效果的真正原因。
我已经尝试清理和重建。
不要在这里乱搞size_t
。你没有提到 maxState
的实际类型,但如果它的值为 -1,那么它是 signed 类型。所以使用 signed 索引变量:
for (int i = 0; i < maxState; ++i)
当maxState
的值为负时,这将执行零次。