0
void main() {
    char *x;
    x="abc";
    *x='1';
}

为什么会出现“访问冲突写入位置”错误?

我不能给xby赋值*x='1'

4

3 回答 3

3

修改字符串文字会导致未定义的行为,请尝试改用char数组:

int main() {
    char x[] = "abc";
    *x ='1';
}

另请注意,您应该使用int main().

或者,如果您更喜欢使用指针,请使用这个有点多余的示例:

int main() {
    char x[] = "abc";
    char *y = x;
    *y ='1';
}
于 2013-09-07T07:31:19.637 回答
0

那是错误的,因为您正在尝试修改字符串文字。它是在只读模式下创建的,如果您尝试更改它,那么它将是访问冲突并因此导致错误。

作为如何实现它的解决方案,您可以尝试使用char数组

于 2013-09-07T07:30:12.733 回答
0

应用程序在几个内存区域(内存页面)中加载,代码只读可执行文件(程序计数器可以在其中运行),字符串文字可能理想地进入只读区域。

写入它会导致访问冲突。事实上,你得到了这种违规情况很好,你在运行 Windows 吗?这肯定会让我感到惊讶。

于 2013-09-07T07:38:14.113 回答