循环忽略限制:如何处理这个损坏的 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的值为负时,这将执行零次。