void main() {
char *x;
x="abc";
*x='1';
}
为什么会出现“访问冲突写入位置”错误?
我不能给x
by赋值*x='1'
?
修改字符串文字会导致未定义的行为,请尝试改用char
数组:
int main() {
char x[] = "abc";
*x ='1';
}
另请注意,您应该使用int main()
.
或者,如果您更喜欢使用指针,请使用这个有点多余的示例:
int main() {
char x[] = "abc";
char *y = x;
*y ='1';
}
那是错误的,因为您正在尝试修改字符串文字。它是在只读模式下创建的,如果您尝试更改它,那么它将是访问冲突并因此导致错误。
作为如何实现它的解决方案,您可以尝试使用char
数组
应用程序在几个内存区域(内存页面)中加载,代码只读可执行文件(程序计数器可以在其中运行),字符串文字可能理想地进入只读区域。
写入它会导致访问冲突。事实上,你得到了这种违规情况很好,你在运行 Windows 吗?这肯定会让我感到惊讶。