C语言中return疑问
在c语言开发中,常常遇到函数返回值问题,我在不少的地方看人用过如下的编程方式
int Function()
{
int n = 10;
return n;
}
void main()
{
int i = Function();
}
这种编程方式,我认为有点问题,当Function函数结束后,其占用的栈空间已被销毁,但是我调试时发现还能返回正确的值,这种写法到底有没有问题,是不是存在隐患。
[解决办法]
- C/C++ code
1: int Function()2: {//00401000 55 push ebp//00401001 8B EC mov ebp,esp//00401003 83 EC 44 sub esp,44h//00401006 53 push ebx//00401007 56 push esi//00401008 57 push edi3: int n = 10;//00401009 C7 45 FC 0A 00 00 00 mov dword ptr [ebp-4],0Ah4: return n;//00401010 8B 45 FC mov eax,dword ptr [ebp-4]5: }//00401013 5F pop edi//00401014 5E pop esi//00401015 5B pop ebx//00401016 8B E5 mov esp,ebp//00401018 5D pop ebp//00401019 C3 ret6:7: void main()8: {//00401020 55 push ebp//00401021 8B EC mov ebp,esp//00401023 83 EC 44 sub esp,44h//00401026 53 push ebx//00401027 56 push esi//00401028 57 push edi9: int i = Function();//00401029 E8 D2 FF FF FF call Function (00401000)//0040102E 89 45 FC mov dword ptr [ebp-4],eax10: }//00401031 5F pop edi//00401032 5E pop esi//00401033 5B pop ebx//00401034 8B E5 mov esp,ebp//00401036 5D pop ebp//00401037 C3 ret