读书人

请教在什么情况下在栈中声明的变量的

发布时间: 2012-03-02 14:40:29 作者: rapoo

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

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);
}

读书人网 >C++

热点推荐