为什么发生内存访问违规?

时间:2014-07-21 15:57:46

标签: c++

我正在尝试反转一个字符串, 我不明白为什么我会将此错误发送到Unhandled exception at 0x00f818c2 in CPP_TEST.exe: 0xC0000005: Access violation writing location 0x00f87838.以下? 请帮帮我。

void swap(char* in, int start, int end)
{
    char *temp = new char;
    *temp = in[start];
    in[start] = in[end];//Unhandled exception at 0x00f818c2 in CPP_TEST.exe: 0xC0000005: Access violation writing location 0x00f87838.
    in[end] = *temp;
}
void Reverse(char* in, int start, int end)
{
    if(start == end)
    {
        cout << in <<endl;
        return;
    }
    else
    {
        while(start != end)
        {
            swap(in, start++, end--);
            //Reverse(in, start, end);
        }
    }
}
int main()
{


    char* in = "Hello";
    Reverse(in, 0, 4);
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:5)

字符串文字不可修改,但您正在尝试修改它。使用可修改的字符串:

char in[] = "Hello";

swap中,您泄漏了内存。您不需要在那里动态分配内存。代码可以是

void swap(char* in, int start, int end)
{
    char temp = in[start];
    in[start] = in[end];
    in[end] = temp;
}

while(start != end)
{
    swap(in, start++, end--);
    //Reverse(in, start, end);
}

如果end - start是奇数,则此循环将永不终止。