【发布时间】:2020-10-13 21:26:15
【问题描述】:
考虑下面的代码。
#include<stdio.h>
int *abc(); // this function returns a pointer of type int
int main()
{
int *ptr;
ptr = abc();
printf("%d", *ptr);
return 0;
}
int *abc()
{
int i = 45500, *p;
p = &i;
return p;
}
输出:
45500
根据link,我知道这种行为是未定义的。但是为什么我每次运行程序时都会得到正确的值。
【问题讨论】:
-
因为允许未定义的行为这样做。顺便说一句,我认为这个问题没有任何问题。赞成。
-
因为你的程序很简单。尝试在对
abc()和printf()的调用之间插入对其他函数的调用 -
那又怎样? “未定义”并不意味着“随机”...
-
在调用
abc()之后和现有printf之前添加这个:printf("Test string %d %d %d %d\n", 1, 2, 3, 4)。然后看看会发生什么:) -
调用 abc() 然后调用 def() 并在检查 p 指向什么之后......你可以将 i 设为静态,只要不存在重入问题...(例如修改
*p的线程...)
标签: c undefined-behavior