抛出异常:写入访问冲突。 _My_data是0x7001AC

时间:2018-04-17 19:21:31

标签: c++ visual-studio

我是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.

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用调试器轻松跟踪错误。我强烈建议学习如何使用它。
但无论如何,你的代码有很多问题。首先,您应该了解循环工作的方式以及如何迭代字符串。

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]中存储的char的ASCII值。例如,如果Given[i]='0'那么(int)Given[i]将返回char'0'的ascii值,即48,而不是你想象的0。 您可以在此处找到有关此问题的更多信息:Convert char to int in C and C++