XOR ведет себя непоследовательно между отладкой и установленной версией в C ++, управляемой - PullRequest
0 голосов
/ 13 марта 2012

Мне смешно с моим управляемым кодом C ++ с Visual 2008. Я уверен, что есть простая причина, по которой это происходит, но я просто упускаю это и немного расстраиваюсь здесь.

Проблема: Я использую XOR для оценки контрольной суммы переданного предложения. Что ж, он работает безупречно при отладке, и если я запускаю Visual из релиза, но когда я собираю установщик и устанавливаю релиз на одном компьютере, XOR ведет себя совершенно по-разному, давая мне разные значения. т.е. в отладке это дает мне 44, а в установленной версии это дает мне 79E721FC.

Код:

{
  String^ OrigChecksum=mysentence->Substring(mysentence->IndexOf('*')+1);
  if(mysentence->StartsWith("!"))
  {
    mysentence=mysentence->Substring(mysentence->IndexOf('!')+1,mysentence->IndexOf('*')-mysentence->IndexOf('!')-1);
  }
  else if(mysentence->StartsWith("$"))
  {
    mysentence=mysentence->Substring(mysentence->IndexOf('$')+1,mysentence->IndexOf('*')-mysentence->IndexOf('$')-1);
  }
  int checksum;
  if(mysentence->Length>1)
  {
    for(int i=0;i<mysentence->Length;i++)
    {
      try
     {
       checksum ^= Convert::ToByte(mysentence[i]);
       //MessageBox::Show(Convert::ToByte(mysentence[i]).ToString("X2"));
      }
      catch(...)
      {
      }

    }
    String^ strChecksum=checksum.ToString("X2");
    //MessageBox::Show(OrigChecksum+","+strChecksum+","+checksum);

    if(OrigChecksum==strChecksum)
    {
      return true;
    }
    else
    {
     return false;
    }
  }
  else
  {
  return false;
  }
}

Обратите внимание на MessageBox, который я использую для просмотра значений при установке, поскольку я не могу использовать отладчик там, а когда я отлаживаю в Visual studio, все идеально ... Я попробовал другой подход с такими же результатами, как показано ниже: используя массив символов массив символ ^ = mysentence-> ToCharArray (); и используя оператор ^ вместо контрольная сумма = контрольная сумма ^ int (символ [num])

У кого-нибудь был подобный опыт? Пожалуйста, какой-нибудь совет или свет на это?

Всего наилучшего, Адам

1 Ответ

3 голосов
/ 13 марта 2012

int checksum; никогда не инициализируется, поэтому попытка xor с ним вызывает неопределенное поведение.

...