引发异常:写入访问冲突._My_data 0x7001AC

Exception thrown: write access violation. _My_data was 0x7001AC

本文关键字:My data 0x7001AC 访问冲突 异常      更新时间:2023-10-16

我是一个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。