c++ - (msvcr120d.dll) 处的未处理异常

标签 c++

为大学类(class)编写了一些代码。 这段代码在大学的机器上编译和运行良好——但不能在我的个人笔记本电脑上运行。我正在使用 Visual Studio 2013(与 Uni 相同),在 2015 Macbook 上通过训练营运行 Windows 10。

代码编译良好 - 在控制台中打印前几行 - 然后崩溃,并出现以下错误。

“ConsoleApplication3.exe 中 0x56BEA9E8 (msvcr120d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xCCCCCCC0。”

int main()
{
    string wheel1[3], wheel2[3], wheel3[3];

    for (int counter = 0; counter < 4; counter++) { wheel1[counter] = getSuit(); }
    for (int counter = 0; counter < 4; counter++) { wheel2[counter] = getSuit(); }
    for (int counter = 0; counter < 4; counter++) { wheel3[counter] = getSuit(); }

    return 0;
}

已尝试寻找解决方案 - 但这些通常似乎指向一些错误的编码。

已经仔细查看了与我发现的其他错误类似的任何内容,但我没有发现任何问题。

也不确定为什么这段代码可以在一台机器上完美运行,而在另一台机器上却不能...

非常感谢所有帮助..!

  • @Ian,好像是_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));在 dbgdel.cpp 中,由 for (int counter = 0; counter < 4; counter++) { wheel1[counter] = getSuit(); } 调用

    • 编辑:删除了所有与错误无关的代码。

最佳答案

您的数组 wheel1、wheel2 和 wheel3 为 3 个字符串对象分配内存,而在 for 循环中您将尝试访问尚未分配空间的第 4 个元素。

for (int counter = 0; counter < 4; counter++) { wheel1[counter] = getSuit(); }

在某些时候计数器会变为 3,然后您的代码将尝试非法访问内存块。 要么修改你的循环,使计数器达到 3,要么将数组的大小增加 1。

关于c++ - (msvcr120d.dll) 处的未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33482041/

相关文章:

c++ - C++ Builder 中的 VCL 应用程序和 FormCreate 事件更好地理解

C++ 设计问题。模板新手

c++ - 我想我需要一个带键的链表结构。有什么建议么?

c++ - 在 GCC 中不能同时支持 OpenMP v4 和 v5

c++ - C++/C 中以太网 ip 中的 eth_dr 是什么?

c++ - 使用 Math::Round

c++ - 参数在继承函数中消失

c++ - 通过指向其基址的指针删除 POD 对象是否安全?

c++ - 末端指针会与其他对象重叠吗?

c++ - Qt两种不同的设计窗体类