Ошибки, баги, вопросы - страница 2569

 
Slava:

В журнал тестера что выводится при этом?

Уже понял, была отладочная версия советника, по всей видимости ее нельзя использовать для тестера в локальных агентах, а можно только в тех, что на твоем компьютере, хотя и непонятно, почему.
 
Roman:

Да, и содержит мусор

Вопрос был совсем в другом. Проинициализировать пустым значением, не нулём. Если такое вообще возможно.
Ноль это число! Пустое значение в моём понимании, нет чисел, пустота.
Но ячейки памяти проинициализированы этой пустотой )) 

вот, например, инициализируем различные типы "пустотой"

   uchar  c=EMPTY_VALUE;
   uint   i=EMPTY_VALUE;
   ulong  l=EMPTY_VALUE;
   short  s=EMPTY_VALUE;
   float  f=EMPTY_VALUE;
   double d=EMPTY_VALUE;
   string str=EMPTY_VALUE;
   uchar uc[];
   StringToCharArray(str,uc);

что имеем в HEX виде при отладке:


Со стрингом вообще прикол


но если стринг проинициализировать так

string str="";

тогда результат:


ну а если вообще не инициализировать(string str;) равно как и проинициализировать =NULL, тогда то, что вам нужно - реальная пустота:


 
Nikolai Semko:

вот, например, инициализируем различные типы "пустотой"

что имеем в HEX виде при отладке:


Со стрингом вообще прикол


но если стринг проинициализировать так

тогда результат:


ну а если вообще не инициализировать(string str;) равно как и проинициализировать =NULL, тогда то, что вам нужно - реальная пустота:


Где Вы пустоту увидели? Выход за пределы массива называется. В С/С++ undefined behaviour, а здесь runtime error.
Все остальные типы неявно кастятся от double, так что, там тоже все правильно.
 
Vladimir Simakov:
Где Вы пустоту увидели? Выход за пределы массива называется. В С/С++ undefined behaviour, а здесь runtime error.
Все остальные типы неявно кастятся от double, так что, там тоже все правильно.

у стринга пустота(а не у массива uchar), словно его и нет, т.е. даже памяти не выделяется.

У других типов такого наблюдается. Если объявили переменную, значит память уже выделилась.
Но ведь по сути стринг это же не примитивный тип, а ссылочный, равно как и любой массив.

 

не могу сообразить как проверить PrintFormat

Примечание

При работе в тестере стратегий в режиме оптимизации функция PrintFormat() не выполняется.

есть мысли у кого?

 
Igor Makanu:

не могу сообразить как проверить PrintFormat

Примечание

При работе в тестере стратегий в режиме оптимизации функция PrintFormat() не выполняется.

есть мысли у кого?

Проверить что?

Поглядеть как выводит?

В визуализаторе.

 
Nikolai Semko:

у стринга пустота, словно его и нет, т.е. даже памяти не выделяется.

У других типов такого наблюдается. Если объявили переменную, значит память уже выделилась.
Но ведь по сути стринг это же не примитивный тип, а ссылочный.

Как же нет? Память под объект string в куче выделена, а по адресу памяти, с которого начинается сам текст стоит 0х00
 
Igor Makanu:

не могу сообразить как проверить PrintFormat

Примечание

При работе в тестере стратегий в режиме оптимизации функция PrintFormat() не выполняется.

есть мысли у кого?

А если StringFormat и полученную строку в файл? (для каждого прохода свой файл создавать в папке общего доступа - чтобы тестер не затёр их).

 
Vladimir Simakov:
Как же нет? Память под объект string в куче выделена, а по адресу памяти, с которого начинается сам текст стоит 0х00

память выделяется только на имя и на ссылку, но не на сам объект, т.к. его пока нет. С примитивными типами такого нет, там память выделяется в момент создания переменной, даже без инициализации.
Не хочу бадаться терминологией. И так все друг друга понимают. 
Все это очевидности. 

 
Vladimir Karputov:

А если StringFormat и полученную строку в файл? (для каждого прохода свой файл создавать в папке общего доступа - чтобы тестер не затёр их).

хороший вариант, протестирую

ЗЫ: код в очередной раз переписываю, чтобы в оптимизаторе быстрее работал (результаты было 5ч, сейчас 1,5 ч !!!)

вот сейчас наткнулся в справке на printf(), и решил проверить все свои принты, где нужно заменить....ну заменил и стала оптимизация  22 ч ....нашел где накосячил, но естественно сразу мысли, что дело все в  printf()  !!!

)))


попробовал проверить работу printf() в оптимизаторе так:

int xx=10;
void OnTick()
{  printf("1/x = %f",1/(xx--));
....

пока сразу получил, что ожидал: 

2019.09.20 11:29:16.611 Core 1 genetic pass (0, 607) tested with error "critical runtime error 503 in OnTick function (zero divide, module Experts\)" in 0:00:00.048


ожидалось, что если написано "PrintFormat() не выполняется." то и должен это получить