ou_ou

博客园 首页 新随笔 联系 订阅 管理

一次在数据处理时内存数据被迫刷新问题,定义了两个结构体变量 u8 A,u8 B。这两个变量是顺序定义的,那在内存中的地址也是相连的,A 内存为1K,B内存为600b,他们都从同一个地址拷贝数据。当我调试时发现,每当我收到变量A拷贝数据时B 变量的数据也被刷新一次。

#define  CopyDataNum 2000  //拷贝数据量

pData[CopyDataNum];

u8*pt;

case 1:

pt = &A;

for(i=0;i<CopyDataNum;i++)

{  

  pt++=pData[i];

}

break;

 

case 2:

pt = &B;

for(i=0;i<CopyDataNum;i++)

{  

  pt++=pData[i];

}

break;

 

有经验的人一看就能看出来for那里都已经内存溢出了,因每次都拷贝了2K的内容,而A 和B内存大小只是1K和600b,所以每次拷贝上一个数据都会因为溢出把下一个数据也刷新了一边。

修改如下就可以解决问题了。

 

case 1:

pt = &A;

for(i=0;i<siezof(A);i++)

{  

  pt++=pData[i];

}

break;

 

case 2:

pt = &B;

for(i=0;i<siezof(A);i++)

{  

  pt++=pData[i];

}

break;

 

posted on 2013-04-25 21:01  ou_ou  阅读(203)  评论(0编辑  收藏  举报