0

这没有运行时错误

int main()
{
    char *p = "Hello"; 
} 

这会产生运行时错误

int main()
{
   int *p; 
   *p = 5; 
}

我无法理解发生这种情况的原因。将不胜感激任何帮助。

4

3 回答 3

4

您的第一个示例将指针指向p文字字符串,因此p指向有效内存。

您的部分声明了指针p,但不指向任何内存地址。然后下一条语句*p = 5取消引用p,它试图5存储在指针中存储的内存地址p。由于您没有指向p有效内存,因此您的应用程序崩溃。

于 2013-10-26T20:10:35.993 回答
2

您的第二个片段是未定义的行为,因为指针未初始化。

你的第一个片段也会让你陷入麻烦:你应该写const char *p = "Hello";. 这是因为字符串文本将由 C 运行时库添加到字符串文字表中。修改它是未定义的行为。使用const有助于强制执行。

于 2013-10-26T20:10:20.550 回答
1

第一个程序设置指针的值,并且定义明确(只要您不尝试修改字符串)。

第二个程序通过未初始化的指针赋值(因此具有未定义的行为)。

以下是第一个程序的大致等价物,但使用的是int

int main()
{
   int val = 5;
   int *p = &val;
}
于 2013-10-26T20:10:17.413 回答