Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > программа "проскакивает" кусок кода


Автор: MaxS 6.5.2010, 20:22
Здравствуйте! 
Вопрос из серии "а почему не работает", возможно и к .net не относящийся.
Пишу на managet c++, написал кусок кода для тестирования функций и обнаружил странную  ошибку.  Программа "проскакивает" часть строк, хотя не должна:
Код

//вот этот код, должен был проверить класс CripXtea.
//пока все работает
array<System::Byte>^ k = gcnew array<Byte>(4);
k[0] = 1;
k[1] = 2;
k[2] = 3;
k[3] = 4;
CripXtea tester(k,10); //это последняя строчка которую выполняет программа,
                                   // класс создается и далее наченает выполняться...
Int64 att = 123;
Int64 atc; 
atc = tester.XteaEnc(att);
Int64 atd;
atd = tester.XteaDec(atc);
PostPro::Form1^ form123 = form123->GetInstance(); //... вот эта строчка! 
System::String^ st = gcnew System::String("out=");
st +=atc+"-"+atd;//строка формируется: out=0-0, хотя atc и  atd и созданы то небыли!
form123->PrintInMes(st);

Понимаю, что наверняка сам дурак, но объясните - почему? smile

Автор: A5uKa 7.5.2010, 14:40
какой класс создаётся и что начЕнает выполняться. 

Цитата

вот эта строчка!
 - что нитак со строчкой ?

Ничего вообще не понимаю...  smile 

Автор: Pilger 7.5.2010, 14:51
Цитата(A5uKa @ 7.5.2010,  14:40)
какой класс создаётся и что начЕнает выполняться. 

Код

array<System::Byte>^ k = gcnew array<Byte>(4);
k[0] = 1;
k[1] = 2;
k[2] = 3;
k[3] = 4;
CripXtea tester(k,10); //это последняя строчка которую выполняет программа,
                                   // класс создается и далее наченает выполняться...

PostPro::Form1^ form123 = form123->GetInstance(); //... вот эта строчка! 
System::String^ st = gcnew System::String("out=");
st +=atc+"-"+atd;//строка формируется: out=0-0, хотя atc и  atd и созданы то небыли!
form123->PrintInMes(st);


Он хочет сказать, что вот этот код

Код

Int64 att = 123;
Int64 atc; 
atc = tester.XteaEnc(att);
Int64 atd;
atd = tester.XteaDec(atc);


не выполняется

Автор: Sartorius 7.5.2010, 14:59
MaxS, трассировка вам поможет

Автор: A5uKa 7.5.2010, 15:14
Цитата(Pilger @ 7.5.2010,  14:51)
Цитата(A5uKa @ 7.5.2010,  14:40)
какой класс создаётся и что начЕнает выполняться. 


Он хочет сказать, что вот этот код

Код

Int64 att = 123;
Int64 atc; 
atc = tester.XteaEnc(att);
Int64 atd;
atd = tester.XteaDec(atc);


не выполняется

А если убрать код вокруг этого выполняется ? 

Автор: MaxS 7.5.2010, 15:36
Как раз трассировкой я и обнаружил, что он их проскакивает.
Проблема была в том, что компилировал как релиз, при компиляции в дебаге он все строчки проходит. Хотя странно - почему он в релизе "лишний" код не компилирует?

Автор: Sartorius 7.5.2010, 17:17
Проверь тогда Xtea... методы. Скорее всего они константу возвращают всегда и компилятор это оптимизировал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)