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

Ras*_*yak 0 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;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

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

char in[] = "Hello";
Run Code Online (Sandbox Code Playgroud)

swap,你泄漏记忆.您不需要在那里动态分配内存.代码可以

void swap(char* in, int start, int end)
{
    char temp = in[start];
    in[start] = in[end];
    in[end] = temp;
}
Run Code Online (Sandbox Code Playgroud)
while(start != end)
{
    swap(in, start++, end--);
    //Reverse(in, start, end);
}
Run Code Online (Sandbox Code Playgroud)

如果end - start是奇数,则该循环永远不会终止.