尝试将push_back推送到循环中的列表<int>时访问被拒绝

时间:2017-09-02 16:59:55

标签: c++ list access-denied push-back

在学习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,问题就会停止。
  • 如果我使用其他容器,则不会出现此问题。

这是编译器中的错误还是我遗漏了什么?

0 个答案:

没有答案