Access违规写入位置的未处理异常

时间:2013-05-07 03:16:08

标签: c++ exception

我正在尝试编写一个简单的反向字符串程序并得到上述错误。我无法理解我做错了什么。

void reverse(char *str) {
char *end, *begin;
end = str;
begin = str;

while (*end != '\0') {
    end++;
}

    end--;

char temp;

while (begin < end) {
    temp = *begin;
    *begin++ = *end; //This is the line producing the error
    *end-- = temp;
}
}

void main() {
char *str = "welcome";
reverse(str);
}

需要你的帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您正在尝试修改字符串文字,这是未定义的行为。如果你想修改它,这将是str中声明main的有效方式:

char str[] = "welcome";

此外,您将end分配到str的开头,然后您正在执行此操作:

end--;

将指针递减到为字符串分配的内存之前,这是未定义的行为。我猜你打算这样做:

end = str+ (strlen(str)-1);