Ami*_*deh 0 c c++ gcc segmentation-fault visual-studio
可能重复:
修改C字符串常量?
你能解释为什么我在上述线路上遇到访问冲突吗?我猜这是我的进程内存,我可以访问和更改它的内容.
#include <stdio.h>
int main()
{
char* list[5]={"An","exam","on","Hall oween","night!!!!"};
char **p;
p=list;
*(*(p+1)+2)='A'; // <==== Access vioalation here
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你的代码相当于p[1][2]='A';
ie它想要在第二个字符串中设置第三个char.
但由于字符串是字符串文字,因此它们是不可变的,当您尝试修改其内容时会出现未定义的行为.特别是它们可以位于只读存储器中.在这种情况下,您会收到访问冲突.
通常,可执行文件由代码,全局变量和常量的不同部分组成.可执行文件被映射到进程中,内存访问权限被设置为可执行文件中声明的内容.通常,代码设置为ReadExecute,全局变量设置为ReadWrite,常量设置为Read.
然后,CPU强制执行这些内存访问设置(仅在64位CPU上执行).您可以使用VirtualProtect手动更改内存保护.请注意,它只有页面粒度.
归档时间: |
|
查看次数: |
523 次 |
最近记录: |