【发布时间】:2020-03-29 15:52:31
【问题描述】:
请告诉我这段代码有什么问题,我无法打印值 出现分段错误错误。
int main()
{
int i=3, *p;
p = &i+1;
*p = 30;
printf(“%d”, *p);
}
如果我使用此代码,它工作正常。
int main()
{
int i=3, *p, *q;
q = &i;
p = q+1;
*p = 30;
printf(“%d”, *p);
}
感谢您的回复
【问题讨论】:
-
它们都表现出未定义的行为。无论发生在
i之后,您都在写入内存。当然,你会得到不可预知的结果。这被称为内存损坏,这是一个严重的错误。不要这样做。 -
在第一个示例中,
p = &i + 1;表示p将指向存储i的空间之后的地址。然后你用*p = 30;访问它。