struct MemList
{
  typedef enum State
  {
    NoInCreate = 0,
    InCreate   = 1
  }
  State state;
  int   nCount;
};
int memlistsize = sizeof(MemList);
MemList *memlist1 = new MemList[10];
MemList *memlist2 = new MemList[10];
for(int i = 0; i < 10; i++)
{
  memlist1[i].nCount = -1;
  memlist2[i].nCount = 0;
}
memlist1[0].nCount = 11;
memlist1[1].nCount = 12;
int nListInx = -1;
for(int i = 0; i < 10; i++)
{
  if(memlist1[i].nCount > -1)
  {
    nListInx++;
    
    //下面这句有时会让memlist2[x].nCount出现-1的情况
    memcpy(memlist2+nListInx*memlistsize, memlist1+i*memlistsize, memlistsize);
    
    //而下面这句memlist2[x].nCount结果正常
    //memcpy(&memlist2[nListInx], &memlist1[i], memlistsize);
  }
}
为什么memcpy(memlist2+nListInx*memlistsize, memlist1+i*memlistsize, memlistsize);会引起结果异常呢?

解决方案 »

  1.   

    你的memlist2和memlist1是MemList指针memlist1+1指向的其实就是memlist1[1]了,也就是说memlist1+1其实是将指针的地址增加了sizeof(MemList)了而不是1所以你改成:memcpy(memlist2+nListInx, memlist1+i, memlistsize);就行了
    memcpy(&memlist2[nListInx], &memlist1[i], memlistsize);与上面那个是一个意思,不同的表示方法而已
      

  2.   

    就像这样
    int a[10];
    int *p = a;
    p = p + 1; //  这个时候p指向了a[1];指针p的加1相当于内存地址加了sizeof(int)