抛出未处理的异常:写访问冲突:打印出数组元素

Unhandled exception thrown: write access violation: Printing out array elements

我有一个函数,它打印出一个字符串数组。第二个函数应该打印反向列表,但由于某种原因弹出一个名为 xmemory 的新选项卡,我收到消息:“抛出未处理的异常:写访问冲突。this->_Myproxy 是 0xCCCCCCCC。”。 =16=] 在网上搜索了几个小时后,我终于决定看看这里是否有人可以帮助我。

这是我的代码:

#include <iostream>
#include<string>
using namespace std;

void display(string array[5]);
void displayReverse(string array[5]);

int main()
{
    string fruit[5] = {"Apple", "Banana", "Orange", "Kiwi", "Cherry"};
    display(fruit);
    displayReverse(fruit);
    return 0;
}

void display(string array[5])
{
    for (int i = 0; i < 5; ++i)
    {
        cout << array[i] << endl;
    }
}

void displayReverse(string array[5])
{
    swap(array[1], array[5]);
    swap(array[2], array[4]);
    swap(array[4], array[5]);

    cout << array[1] << endl << array[2] << endl << array[3] << endl << array[4] << endl << array[5] << endl;
}
#include <iostream>
#include<string>
using namespace std;

void display(string array[5]);
void displayReverse(string array[5]);

int main()
{
    string fruit[5] = {"Apple", "Banana", "Orange", "Kiwi", "Cherry"};
    display(fruit);
    displayReverse(fruit);
    return 0;
}

void display(string array[5])
{
    for (int i = 0; i < 5; ++i)
    {
        cout << array[i] << endl;
    }
}

void displayReverse(string array[5])
{
        for (int i = 4; i >= 0; i-=1)
    {
        cout << array[i] << endl;
    }

}

使用循环而不是交换。这真是个好主意。

数组索引从0开始。它不会从1开始。所以如果你有5个元素的数组,你可以通过array[0]访问第一个元素。 array[1] 代表第二个元素。您的 displayReverse() 正在尝试访问数组中不存在的第 6 个元素。

下面是经过一些修改的代码。

#include <iostream>
#include <string>
using namespace std;

void display(string array[], int size);
void displayReverse(string array[]);

int main()
{
    string fruit[5] = {"Apple", "Banana", "Orange", "Kiwi", "Cherry"};
    display(fruit, 5);
    displayReverse(fruit);
    return 0;
}

void display(string array[], int size)
{
    for (int i = 0; i < size; ++i)
    {
        cout << array[i] << endl;
    }
}

void displayReverse(string array[])
{
    swap(array[0], array[4]);
    //swap(array[2], array[3]);
    swap(array[1], array[3]);

    cout << array[0] << endl << array[1] << endl << array[2] << endl << array[3] << endl << array[4] << endl;
}