在学习C ++并使用列表时,我开始遇到一些奇怪的行为,我能够将其与以下代码隔离开来:
#include <list>
int main() {
std::list<int> ls;
for(int i = 0; i < 10; ++i) {
ls.push_back(1);
}
}
我可以编译这段代码,但是当我尝试运行它时,“拒绝访问”会打印到提示符并终止程序。有时,当我运行可执行文件时,.exe文件将从文件系统中消失,我将无法在该文件夹中创建具有相同名称的新文件,即使我删除并重新创建该文件夹。
一些注意事项:
- 我能够重现此错误的循环上的最小迭代次数是10.低于程序运行正常的次数。
- 我在Windows 10上使用Microsoft编译器运行它。
- 只有在指定/ MT选项时才会出现错误。如果我指定/ MTd,/ MD或/ MDd,程序运行正常。 (未指定任何这些选项也会导致问题。这就是我首先发现问题的方法)
- 如果我尝试指定/ Z7,/ Zi或/ ZI,则不会出现问题。 (所以我无法调试它)
- 我试过反汇编用/ MT和/ MD编译生成的代码,看看我是否能发现任何差异。生成的代码有一些小的差异,但我不知道他们是否对这种行为负责。(我几乎不知道汇编)
- Microsoft编译器版本:Microsoft(R)C / C ++优化编译器版本19.10.25019第x86页(我的窗口是葡萄牙语)
- 如果我在代码中的任何位置放置一个std :: cout,问题就会停止。
- 如果我使用其他容器,则不会出现此问题。
这是编译器中的错误还是我遗漏了什么?