我正在接触"访问违规"错误,但无法确定它的根本原因。我是c ++的新手,并且作为初学者准备C ++编码竞赛。请帮助我找到它的根本原因。请找到附带的屏幕截图。
提前致谢。
以下是我在单个.cpp文件中的代码。
#include <iostream>
using namespace std;
void reverse(char *str) {
char * end = str;
char tmp;
if (str) {
while (*end) {
++end;
}
--end;
while (str < end) {
tmp = *str;
*str++ = *end; //Getting exception here
*end-- = tmp;
}
}
}
int main ()
{
char *str="Test";
cout << "Before change"<<str; // prints Hello World!
reverse(str);
cout << "After change"<<str; // prints I'm a C++ program
getchar();
}
答案 0 :(得分:2)
您正在获得segmentation fault,因为您正在尝试编辑只读内存,其中包含文字字符串&#34; Test&#34;存储(因为字符串文字在c ++中是const char*
)。
为了使代码运行,您可以将文字字符串存储在char数组中,这样main()
中的第一行将如下所示:
char str[] = "Test";
答案 1 :(得分:0)
问题是C ++中默认的字符串常量类型是const char *。
在以下行中,将非const char *分配给const char *。
char *str="Test";
因此,当您将此变量传递给reverse函数时,您尝试写入只读内存。这违反了C ++的规则,并导致意外行为。
定义像这样的字符串来解决问题:
char str[] = "Test";
这使你能够修改字符串,因为它不再是一个const。