请问在什么情况下,在栈中声明的变量的地址会被修改?
不是人为的修改,比如这样的情况 :
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);
}