读书人

修改指针常量指向的内容出错咋回事情

发布时间: 2012-02-21 16:26:23 作者: rapoo

修改指针常量指向的内容出错,怎么回事情?
int main(int argc, char* argv[])
{
char * const pc= "asdf ";
* pc = 'b ';
*(pc+1)= 'c ';
cout < <pc < <endl;
return 0;
}

编译通过,生成.exe文件,
执行文件时候发生错误:
ooptest.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。

注释掉* pc = 'b ';
*(pc+1)= 'c ';
就没事了。
请问是怎么回事情?

[解决办法]

char ar[] = "asdf ";

char * const pc = ar;

这样吧

[解决办法]
你没有分配内存,对吧。
那你这个指针指向哪里呢?其实指向的是常量区,这一段是受操作系统保护的。
所以如果你分配了内存,不管是在堆上或在函数栈上都没有问题。
见Chiyer(星羽)的回答。

读书人网 >C++

热点推荐