引发异常:写入访问冲突._My_data 0x7001AC
Exception thrown: write access violation. _My_data was 0x7001AC
我是一个C++初学者。我尝试编写一个获取某个字符串的代码,例如 - "there1hello0"
.我试图从中做出一个句子,遵循这个规则:
每个单词都以一个数字结尾,指定其在句子中的位置。
因此,这句话是:"hellothere"
。
我的代码:
void analyze()
{
string Given = "there1hello0";
int flag = 0;
string word = "";
string Display[2];
for (int i = 0; i <= Given.length(); i++) {
if (isdigit(Given[i])) {
for (int x = flag; x <= 1; x--) {
word += Given[i - x];
}
Display[(int)Given[i]] = word;
word = "";
flag = 0;
}
else {
flag++;
}
}
for (int z = 0; z <= 1; z++) {
cout << Display[z];
}
}
int main()
{
analyze();
system("pause");
return 0;
}
我包括了<string>
和<iostream>
库,并使用了命名空间 std。
出于某种原因,我无法弄清楚。因为我无法真正理解异常,所以我的代码不起作用并抛出以下内容:
Exception thrown: write access violation. _My_data was 0x7001AC.
任何帮助将不胜感激。
您可以使用调试器轻松跟踪错误。我强烈建议学习如何使用它。
但无论如何,您的代码存在多个问题。首先,你应该了解 for 循环是如何工作的,以及你应该如何迭代字符串。
for (int i = 0; i <= Given.length(); i++)
应该是
for (int i = 0; i < Given.length(); i++)
所以<=
你应该使用<
.因为如果 n 是长度,字符串的最后一个元素存储在位置 n-1 上,因为您是从 0 开始迭代的。
也在你的内循环中
for (int x = flag; x <= 1; x--) {
您正在向下迭代,因此您应该比较x >= 1
而不是x <= 1
。
此外,(int)Given[i]
返回存储在 Given[i]
中的字符的 ASCII 值。例如,如果Given[i]='0'
则(int)Given[i]
将返回字符"0"的 ascii 值,即 48 而不是您想象的 0。您可以在此处找到有关此问题的更多信息:在 C 和 C++ 中将 char 转换为 int。
相关文章:
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ 初始化 .data 部分中的变量
- 模式"allocate memory or use existing data"
- boost::asio data owning `ConstBufferSequence`
- Python to C++ Data structure API
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- protobuf C++ SQLite handle blob data
- 错误:字段'dateOfBirth'的类型不完整'Poco::Data::Date'
- 为什么构造函数 Message(const T&data) 与 Message(T&& data) 冲突,当 T = int&时?
- "thread-safe data"与"thread-safe code/functions"的区别
- 在反转字符串'my.name.is'时,我得到的输出为"is@.name.my"。我不明白'@'是从哪里来的
- 如何找到目标文件 *.o 的 ram rom 使用情况(.bss .text .rodata .data)?
- My Project的属性配置正确,但Visual Studio仍然无法打开包含头文件
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- *(int*)&data[18]在这段代码中实际上做了什么?
- 出现这种错误的原因是什么"invalid use of non-static data member "
- 构造中错误:未在此范围中声明"data"