【问题标题】:Visual Studio 2012 Error 0xC0000005 Array outputVisual Studio 2012 错误 0xC0000005 数组输出
【发布时间】:2014-04-05 04:51:43
【问题描述】:

我会尽量保持简短和简单。 我有一个体面的基于文本的 RPG 作为我班级的项目。当我尝试生成可用武器列表时,出现错误:

game.exe 中 0x613240F6 (msvcp110.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xFFD9EC31

我发现了很多关于此错误的信息,但无法找到有助于解决我的问题的相关帖子。我发现的一切都与我没有使用的指针有关(我应该这样做,我只是不太了解它们,并且大部分时间都是在 2 小时的睡眠和 3 杯浓缩咖啡的情况下编写的......)

代码有点麻烦而且很长,所以我发布了 3 个相关的东西,我收到错误的函数,生成武器的函数,以及武器类。

代码可以在here找到

非常感谢你们提供的任何帮助!

【问题讨论】:

  • 您的第一个问题是使用 C++ 编写基于文本的 RPG。
  • 首先,这完全无关紧要,其次,就像我说的,它是针对一个班级的,有人告诉我使用面向对象的原则用 C++ 编写一个基于文本的游戏。所以我有点受限。
  • 不是问题的原因,而是 weaponGen 函数有大量冗余代码。您只需要一个Weapon 局部变量,整个函数可以减少到3 行。而randStats 应该通过引用对其参数进行操作,而不是按值返回。
  • Matt McNabb - 谢谢。就像我说的,不眠不休我写了这个。我回过头来很好地清理了武器生成功能。但是,对于您对我的 randStats 函数的含义,我感到有些困惑。
  • 我们可以在这里获取代码吗? pastebin 链接已失效。不要在 SO 中对代码使用 pastebin。

标签: c++ arrays visual-studio-2012 memory


【解决方案1】:

我检查了您的代码,发现您索引shopSelection 数组的方式存在问题。您正在索引不存在的第 7 个元素,这解释了正在报告的访问冲突错误。由于数组的大小为 6,因此最大索引为 5。

【讨论】:

  • 这正是问题所在,我非常希望我能因为一开始就问这个问题而打自己的脸。我已经编码了好几年了(尽管 C++ 是一种新的而且我很难理解的语言)而且我非常清楚数组的索引从零开始并且总是以最大大小 - 1 结束。就像我说的,在 2 小时的睡眠和 3 杯浓缩咖啡的情况下运行,我敲出了大约 600 行代码,却从未意识到我的阵列是多么草率。非常感谢
  • @MichaelWard - 永远记住,一双新鲜的眼睛会看得更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多