编译器也会出错--由VC优化引起的BUG

 

下面的代码用于在REG_MULTI_SZ类型中删除一个字符串,在VC++ Ver6.0下编译:

  for(ULONG i=0;i  {
      pChar=StrStrI(szUpperFilters+i,StringName);
      if(pChar) break;
  }
  
  if(i  {
    MoveMemory(pChar,pChar+DriverLen+1, dwBufLen-DriverLen-(pChar-szUpperFilters)+2);
    DataLen = dwBufLen-DriverLen-1;
    CopyMemory(szBuffer,szUpperFilters,DataLen);
   }

szBuffer中的结果:

  Debug版本:  正确

 Release版本:

   由于VC的优化功能,会使

    MoveMemory(pChar,pChar+DriverLen+1, dwBufLen-DriverLen-(pChar-szUpperFilters)+2);
    DataLen = dwBufLen-DriverLen-1;
    CopyMemory(szBuffer,szUpperFilters,DataLen);
 

优化为:

    DataLen = dwBufLen-DriverLen-1;
    CopyMemory(szBuffer,szUpperFilters,DataLen);
    MoveMemory(pChar,pChar+DriverLen+1, dwBufLen-DriverLen-(pChar-szUpperFilters)+2);

因而出现了错误!

 

你可能感兴趣的:(编译器也会出错--由VC优化引起的BUG)