这没有运行时错误
int main()
{
char *p = "Hello";
}
这会产生运行时错误
int main()
{
int *p;
*p = 5;
}
我无法理解为什么会这样。非常感谢任何帮助。
答案 0 :(得分:4)
您的第一个示例将指针p
指向文字字符串,因此p
指向有效内存。
您的部分声明了指针p
,但未指向任何内存地址。然后是下一个语句*p = 5
解除引用p
,它试图将5
存储在指针p
中存储的内存地址中。由于您没有将p
指向有效内存,因此应用程序崩溃。
答案 1 :(得分:2)
您的第二个代码段是未定义的行为,因为指针未初始化。
你的第一个片段也可能让你遇到麻烦:你应该写const char *p = "Hello";
。这是因为字符串文本将被C运行时库添加到字符串文字表中。它是未定义的行为来修改它。使用const
有助于强制执行此操作。
答案 2 :(得分:1)
第一个程序设置指针的值,并且是明确定义的(只要你不尝试修改字符串)。
第二个程序通过未初始化的指针指定一个值(因此具有undefined behaviour)。
以下是第一个程序的粗略等效项,但使用int
:
int main()
{
int val = 5;
int *p = &val;
}