首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教在什么情况下,在栈中声明的变量的地址会被修改

2012-03-02 
请问在什么情况下,在栈中声明的变量的地址会被修改?不是人为的修改,比如这样的情况:voidfunc(){intabcdoj

请问在什么情况下,在栈中声明的变量的地址会被修改?
不是人为的修改,比如这样的情况   :

void   func()
{
    int   abc;

    do   job   A;

    do   job   B;

    ......

    //   然后到这里时,我再查看   abc的地址就会变掉
}

即在func()函数执行过程中,只是人为的加入int   abc的声明   没有进行赋值及使用,但在func()函数执行的末尾却发现abc的地址被改变(断点调试时发现).程序无异常


有人说有可能是内存泄漏导致的(指针指向的内存没有被释放),或者说还是多线程的问题?

请遇到过的朋友们发表下意见....   :)



[解决办法]
这个函数是递归的,你所看到的不是原来那个abc?
[解决办法]
int abc;声明语句,好像还没给abc分配空间吧!所以应该还没有地址的吧!
[解决办法]
晕,刚才试了下,好像分配了说,呵呵,不好意思,不过地址没变过,支持DarknessTM(我的缘分在哪里?) 的说法
[解决办法]
do job A; 或者 do job B; 破坏了函数栈帧, 比如:

#include <stdio.h>
#include <stdlib.h>

void foobar( int* p )
{
((int*)&p)[-2] -= 4;
}

int main()
{
int a[100] = {0};
printf( "%p %d.\n " , a , a[0] );
foobar( a );
printf( "%p %d.\n " , a , a[0] );
exit(0);
}

热点排行