XOR се държи непоследователно между отстраняване на грешки и инсталирана версия в управляван C++

Чувствам се смешно с моя 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, всичко е перфектно... Опитах друг подход със същите резултати, както следва: използване на масив от char array^ символ=моетоизречение->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