mar*_*ary 12 c return return-value
说我有以下两个功能:
1
int * foo()
{
int b=8;
int * temp=&b;
return temp;
}
Run Code Online (Sandbox Code Playgroud)
2
int * foo()
{
int b=8;
return &b;
}
Run Code Online (Sandbox Code Playgroud)
我没有得到任何警告第一个(例如函数返回局部变量的地址)但我知道这是非法的,因为b从堆栈中消失,我们留下指向未定义内存的指针.
那么我什么时候需要注意返回临时值的地址?
Fil*_*efp 18
你没有在第一个片段中收到警告的原因是因为你没有(从编译器的角度来看)将地址返回给局部变量.
你正在返回的值int * temp.尽管此变量可能(并且在此示例中)包含一个值,该值是局部变量的地址,但编译器不会上升到代码执行堆栈以查看是否是这种情况.
注意:两个片段都同样糟糕,即使您的编译器没有警告您前者.不要使用这种方法.
将地址返回到局部变量时应始终小心; 作为一项规则,你可以说你永远不应该.
static变量是一个完全不同的情况,正在这个线程中讨论.
| 归档时间: |
|
| 查看次数: |
24202 次 |
| 最近记录: |