问一个变量地址的有关问题,超出小弟我所知道的C语言的范畴了

问一个变量地址的问题,超出我所知道的C语言的范畴了
最近移植一个非常大型的程序,出现了一个难以理解的问题。不知道CSDN上现在还有没有牛人能指点一下,看看可能出问题的地方在哪
示例代码如下

A是个结构体

int func_sub(A *a)
{
printf("%x", a);// 结果为8d976450
...
printf("%x", a); // 结果为8d976450
return 0;
}

int func()
{
A a;

....
printf("%x", &a); // 结果为8d976450
func_sub(&a);
printf("%x", &a); //此处结果为878f7592
}

大家觉得可能是什么问题呢?



------解决方案--------------------
建议楼主用gdb或VS单步调试一下。
------解决方案--------------------
Amazing,也许是堆栈出现了某种未知的错误
c确实会遇到一些吊诡的问题,我也遇到过,很遗憾,对底层认知有限,没办法正面解决
不过这种情况下看汇编是个不错的选择
------解决方案--------------------
我要是说不可能LZ信不?
用debugger跟跟吧。
------解决方案--------------------
func_sub有局部变量越界访问,导致堆栈操作出问题了吧
应该没超出你所知的C语言范畴,只是存在你没发现的错误而已
------解决方案--------------------
我觉得这是不是多线程导致的,也就是说printf("%x", &a); //此处结果为878f7592 , 这是另一个线程打印出来的结果。

lz可以在printf里面多打印一下线程号看看是不是同一个线程
------解决方案--------------------
很大的可能是栈写越界, 导致a的值被修改.

a的前后有什么什么变量
------解决方案--------------------
To set a breakpoint when a variable changes value 

From the Edit menu, click Breakpoints.


Click the Data tab of the Breakpoints dialog box.


In the Expression text box, type the name of the variable.


Click OK to set the breakpoint.