分段错误和运行时错误

可能重复:
在c中修改char指针的值会产生段错误

这是一段代码...

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

我知道有一个分段错误,它也给我一个运行时错误。但我想知道,为什么它是一个运行时错误? 为什么编译器在执行程序之前无法告诉我? 为什么它不显示编译时间错误?

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


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


你的错在编译时不能表现出来; 在那里,你的言论是完全有效的。 在运行时,字符串"Hello"是只读的,并且您试图修改它。


char *p="Hello";

表达式类型被认为弃用"Hello"是存储在只读存储区中的字符串文字; 试图修改这些位置是一个未定义的行为 。 在良好的平台上会导致崩溃/分段故障

他们表示为,

const char *p = "Hello";

这意味着p不允许被修改。 如果你想让p可以修改,那么声明它,

char p[] = "Hello";  // 'p' is an array of size 6
链接地址: http://www.djcxy.com/p/86955.html

上一篇: Segmentation fault and run time error

下一篇: develop c++ without Xcode IDE