【问题标题】:C++ Converting string to int Write access violation _Left was 0xCCCCCCCCC++ 将字符串转换为 int 写访问冲突 _Left 为 0xCCCCCCCC
【发布时间】:2017-05-14 00:45:15
【问题描述】:

我是一个相对较新的 C++ 并尝试制作一个小型策略游戏,但在尝试将字符串转换为整数时出现此错误:

写访问冲突。 _左边是0xCCCCCCCC

Visual Studio 将我带到这段代码:

static void __CLRCALL_OR_CDECL assign(_Elem& _Left, const _Elem& _Right) 
_NOEXCEPT
{   // assign an element
    _Left = _Right;
}

使用断点我发现导致错误的代码行是:CountriesFromFile[x].Area = stoi(Line);

CountriesFromFile[x].Area 是一个整数,Line 是我从一个文件中读取的字符串 行绝对是数字,因为我使用 cout 来检查。 任何有关如何解决此错误的帮助将不胜感激

更新

Running countriesFromFile[x].Area = 1;抛出同样的错误。 我还测试了将 x 的值从 0 更改为 1 到 2 而没有变化

更新2

我已经把我的代码弄乱了一段时间,通过删除我遇到错误的代码行,我现在很确定它是编译器,因为错误发生在其他地方所以我删除了该行并且错误发生在某个地方别的。当我尝试使变量=某事时,错误不断发生

【问题讨论】:

  • 掌握调试器的最佳时机,在 CountriesFromFile[x].Area = 1; 之前检查 CountriesFromFile 时它告诉你什么,应该很容易追溯并找出问题所在:-)
  • edit您的问题提供minimal reproducible example
  • 我的水晶球说CountriesFromFile 是一个向量,它是空的。使用push_back().
  • 那里没有问题。我们无法知道您需要什么帮助。你知道什么是写访问冲突吗?如果不是,你为什么不问这个?如果是这样,为什么不显示一些基于此的分析?你知道0xCCCCCCCC 的建议吗?如果不是,为什么不问这个?如果是这样,为什么不展示一些基于此的分析?
  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。

标签: c++ arrays visual-c++ data-structures access-violation


【解决方案1】:

我在这里可能错了,但是“CountriesFromFile[x].Area = stoi(Line)”看起来不错。

0xCCCCCCCC 是未初始化的内存,所以也许检查一下你是否初始化了你的“CountriesFromFile”数组?如果是这样,请确保在某些时候确实将对象添加到其中,并且它不仅仅是空的。

问候,另一个 c++ 菜鸟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多