为大学课程编写了一些代码。 这段代码在大学的机器上编译和运行良好 - 但不能在我的个人笔记本电脑上运行。我使用Visual Studio 2013(与Uni相同),在2015 Macbook上通过bootcamp运行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,似乎是dbgdel.cpp中的_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
,由for (int counter = 0; counter < 4; counter++) { wheel1[counter] = getSuit(); }
答案 0 :(得分:1)
您的数组wheel1,wheel2和wheel3为3个字符串对象分配内存,而在for循环中,您将尝试访问尚未分配空间的第4个元素。
for (int counter = 0; counter < 4; counter++) { wheel1[counter] = getSuit(); }
在某些时候,计数器将变为3,然后您的代码将尝试非法访问内存块。 修改你的循环,使计数器达到3或将数组的大小增加1.