这没有运行时错误
int main()
{
char *p = "Hello";
}
这会产生运行时错误
int main()
{
int *p;
*p = 5;
}
我无法理解发生这种情况的原因。将不胜感激任何帮助。
这没有运行时错误
int main()
{
char *p = "Hello";
}
这会产生运行时错误
int main()
{
int *p;
*p = 5;
}
我无法理解发生这种情况的原因。将不胜感激任何帮助。
您的第一个示例将指针指向p
文字字符串,因此p
指向有效内存。
您的部分声明了指针p
,但不指向任何内存地址。然后下一条语句*p = 5
取消引用p
,它试图5
存储在指针中存储的内存地址p
。由于您没有指向p
有效内存,因此您的应用程序崩溃。
您的第二个片段是未定义的行为,因为指针未初始化。
你的第一个片段也会让你陷入麻烦:你应该写const char *p = "Hello";
. 这是因为字符串文本将由 C 运行时库添加到字符串文字表中。修改它是未定义的行为。使用const
有助于强制执行。
第一个程序设置指针的值,并且定义明确(只要您不尝试修改字符串)。
第二个程序通过未初始化的指针赋值(因此具有未定义的行为)。
以下是第一个程序的大致等价物,但使用的是int
:
int main()
{
int val = 5;
int *p = &val;
}