我正在尝试反转一个字符串,
我不明白为什么我会将此错误发送到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;
}
答案 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
是奇数,则此循环将永不终止。