gpt4 book ai didi

c - 为什么这段代码不返回垃圾值?

转载 作者:太空宇宙 更新时间:2023-11-04 06:17:18 25 4
gpt4 key购买 nike

void f(int **pp)
{
int q = 10;
*pp = &q;
}

int main()
{
int a = 5;
int *p = &a;
f(&p);
printf("%d", *p);
return 0;
}

编译时,此代码返回 0,因为堆栈变量 q 在堆栈帧被移除后消失。

但是,作为一个悬挂指针,我猜它也可能返回一些垃圾值。

但是,我在不同的编译器上编译它,它们都返回0。为什么会这样?

最佳答案

这是因为 undefined behavior .

关于 C 标准,“垃圾”值没有定义概念(例如,可以称为垃圾的值范围等)。行为是未定义的,所以任何事情都可能发生。无法保证在调用 UB 之后,程序会(或不会,就此而言)继续执行以产生(或不产生)任何输出。

相关,引用 C11,章节 §3.4.3,未定义的行为

  • 1 undefined behavior

behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this International Standard imposes no requirements

  • 2 NOTE

Possible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message).

关于c - 为什么这段代码不返回垃圾值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42779153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com