为什么增加指针崩溃指向的数据?

时间:2011-07-16 04:10:33

标签: c++ visual-c++

  

可能重复:
  C/C++ Char Pointer Crash

char *p = "atl";
char c;
c = ++*p; //crashing here

为什么会崩溃?

我知道不应该为数据创建指针增量的内存。

1 个答案:

答案 0 :(得分:8)

p指向const数据,即字符串文字"atl";这意味着,*p无法更改。但是你试图通过写++*p来改变它。这就是它在运行时崩溃的原因。

事实上,大多数编译器会在您编写char *p ="atl"时发出警告。你应该写:

const char *p ="atl";

如果这样写,那么编译器会在编译时编写++*p时给出错误。在编译时检测错误比在运行时检测错误更好。请立即在此处查看编译错误:

编译错误是:

  

prog.cpp:7:错误:增加只读位置'* p'


但是,如果你写

 char p[] = "atl";
 char c = ++*p;  //ok

然后现在正确。因为现在p是一个由字符串文字"atl"创建的数组。它不再指向字符串文字本身。所以你可以改变数组的内容。