我无法理解Yashwant Kanetkar让我们来自C的例子。以下是代码段:
main()
{
int *j;
int *fun();
j = fun();
// If we add a function call here, the print statement prints a garbage value.
printf("\n%d",*j);
}
int *fun()
{
int k = 35;
return (&k);
}
现在在上面的代码中,我无法理解为什么在printf语句导致打印垃圾值之前进行函数调用。我有一个模糊的想法,因为返回的值指向堆栈中的内存位置,在打印此值之前调用另一个函数时会出现问题。但我无法清楚地看到这里发生的事情。请帮忙。
答案 0 :(得分:4)
代码
int *fun()
{
int k = 35;
return (&k);
}
您从fun()
返回本地变量的地址。使用返回值会导致undefined behaviour。
要解释一下,一旦函数fun()
完成执行,就不存在k
。因此,尝试使用&k
之类的内容无效。
注意:无论在特定书籍中提供的解释[与堆栈刷新等有关],都没有在c中标准化。
答案 1 :(得分:0)
int k = 35;
是函数fun()
的本地函数所以一旦从fun()
返回,为k
分配的内存不再有效,并且您将返回&k
(该变量的地址)这将导致未定义的行为