分段错误和运行时错误

时间:2011-09-02 06:14:54

标签: c++ compiler-errors segmentation-fault

  

可能重复:
  Modifying value of char pointer in c produces segfault

这是一段代码......

void main()
{
    char *p="Hello";
    *p= 'h';                      // Segmentation fault .
}

我理解存在分段错误的事实,它也给我一个运行时错误。但我想知道,为什么它是一个运行时错误?为什么编译器在执行程序之前无法告诉我?为什么不显示COMPILE TIME ERROR?

PS:我使用的是Visual C ++ 2005 Express ..

3 个答案:

答案 0 :(得分:2)

字符串文字实际上是char const*类型。但是,为了与不具有const-correct的旧C代码兼容,C ++允许将它们分配给char*。这并不意味着你真的被允许修改它们。

答案 1 :(得分:0)

你的错在编译时无法表现出来;在那里,你的陈述都是完全有效的。它是在运行时,字符串"Hello"是只读的,而您正在尝试修改它。

答案 2 :(得分:0)

char *p="Hello";

表达式类型被视为已弃用"Hello"是存储在只读存储区中的字符串文字;尝试修改这些位置是未定义的行为。在良好的平台中,它会导致崩溃/分段错误

他们表示为,

const char *p = "Hello";

表示不允许修改p。如果您想让p可修改,请将其声明为

char p[] = "Hello";  // 'p' is an array of size 6