前几天遇到一个奇怪的问题,一个指针在运行中被改变了,搜索Source code发现该指针初始化后就没有人

对它进行赋值操作,正常情况下,它的值是不应该变的。显然这块Memory被重写了。
最后发现是由类似以下的写法导致了这块Memory被重写了:
+++++++++++++++++++++++++++++
struct A{
 int aa;
 int bb;
 char cc;
 struct c dd;
 int ee;
 int ff;
 int gg;
 int hh;
};
struct A msg[10];
int functionA(){
 struct A * temp;
 temp= &msg;
 temp= (temp + sizeof(struct A));//问题在这
 memcpy(temp,xxx,len);
}
temp= (temp + sizeof(struct A));这一句将内存地址往后移了 sizeof(struct A) * sizeof(struct

A),已经把指针移到天涯海角了。分析前后的code发现其实是想将指针往后移1或是想将temp的值跳过

sizeof(struct A)这么远的距离。[(*temp)= ((*temp)+sizeof(struct A))]
+++++++++++++++++++++++++++++

要debug这样的问题,好像还没有什么特别方便快捷的方法.好在它能稳定的出现,也幸好对那部分的行为比较熟悉.