• 内存数据拷贝溢出问


    一次在数据处理时内存数据被迫刷新问题,定义了两个结构体变量 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;

  • 相关阅读:
    详解 注解
    线段树分治
    实用Trick
    CF932F(李超线段树+dp)
    CF24D Broken robot(高斯消元)
    LCT学习笔记
    [HNOI2008]GT考试
    [AHOI2009]中国象棋
    [APIO2012]派遣
    CF961G Partitions
  • 原文地址:https://www.cnblogs.com/mouou/p/3043518.html
Copyright © 2020-2023  润新知