XOR ведет себя непоследовательно между отладочной и установленной версией в управляемом C++

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

Проблема: я использую XOR для оценки контрольной суммы переданного предложения. Что ж, он работает безупречно при отладке, и если я запускаю визуализацию как выпуск, но когда я создаю установщик и устанавливаю выпуск на той же машине, 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, все идеально... Я пробовал другой подход с такими же результатами, как показано ниже: использование массива символов ^ характер=моепредложение->ToCharArray(); и используя вместо этого оператор ^ контрольная сумма = контрольная сумма ^ int (символ [число])

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

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


person Aznarepse    schedule 13.03.2012    source источник
comment
Почему у вас есть попытка поймать там?   -  person sth    schedule 13.03.2012
comment
Приговоры принимаются по радио и очень грязны. Иногда я получаю нулевой символ, который вызывает исключение в ToByte...   -  person Aznarepse    schedule 13.03.2012


Ответы (1)


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

person Mankarse    schedule 13.03.2012
comment
Другими словами: checksum, вероятно, содержит какое-то случайное значение в начале. - person sth; 13.03.2012
comment
В точку!!! Какой же я был глупой и слепой... Большое спасибо за помощь и скорость света! - person Aznarepse; 13.03.2012