Кто хорошо разбирается в MQL4, помогите с кодом. Указатели. Очистка памяти с помощью delete. - страница 2

 

возможно просто не считался текст json из файла..например файл ненашёлся :-)

чтобы избегать таких ошибок и не тратить своё время попусту на их поиск - не доверяйте ничему. Всё что можно проверить, должно быть проверено.

И кстати документацию нелишне читать :-) результат prsr.parse(json) авторы библиотеки в примерах проверяют всегда, можно было просто скопипастить и развить пример, тогда правда этой многодневной ветки форума не возникло.

 
Maxim Kuznetsov:

Чтобы избегать таких ошибок и не тратить своё время попусту на их поиск - не доверяйте ничему. Всё что можно проверить, должно быть проверено.  
И кстати документацию нелишне читать :-) результат prsr.parse(json) авторы библиотеки в примерах проверяют всегда, можно было просто скопипастить и развить пример, тогда правда этой многодневной ветки форума не возникло.

Да читаю я доки. Всегда читаю. И не лезу на форум пока не повожусь сам денёк-другой. Просто часто как оно происходит: 1) есть либа 2)скачал подключил и используешь. Я согласен, что нельзя ничему доверять и что в этом случае, конечно, если бы я просто скопипастил, то ошибку найти было бы гораздо проще. Но не всегда же ведь мы берем и вот так все по фен-шую с первого раза реализуем. Вот и тут не обошлось без подобного процесса мучения-обучения. :)
Maxim Kuznetsov:
Возможно просто не считался текст json из файла..например файл ненашёлся :-)
Вы правы. Я до этого не писал индикаторы которые что-то читают из файла, обычно у меня они что-то писали в файл. И когда они писали в файл, я даже особо не задумывался, а почему это при тестинге они пишут не в /MQL4/Files а в /tester/files? :))) Хотя это так очевидно... В общем я скопировал свой json в /tester/files и все заработало.

P.S: Всем огромное спасибо за быструю и эффективную помощь.
 
Slawa:

Покажите мне, где в C++ указатель автоматически обнуляется после операции delete.

По семантике delete указатель является rvalue, но никак не lvalue

В unique_ptr. Уже так привык к ним, что перенес их функционал и на обычный delete. Сейчас проверил - обычный delete, действительно, не приводит значение указателя в NULL.

Проблема возникла с таким вот условным кодом, который был без изменений вставлен в советник и индикатор:

class IntClass
{
   int               iValue;
public:
                     IntClass(int value)
                     {
                        iValue = value;
                     };
                     
                    
};

IntClass *g_pInt = NULL;

int OnInit()
{
   if (!g_pInt)
   {
      g_pInt = new IntClass(5);
      Print(__FUNCTION__, ", создание экземпляра класса.");
   }
   else
      Print(__FUNCTION__, " экземпляр класса уже создан.");
      
   return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
   delete g_pInt;
}

 В этих двух случаях код отрабатывал по-разному при переключении таймфрейма:

0       11:45:04.611    Expert Test_Expert EURUSD,M1: loaded successfully
0       11:45:05.379    Test_Expert EURUSD,M1: OnInit, создание экземпляра класса.
0       11:45:05.379    Test_Expert EURUSD,M1: initialized
0       11:45:12.357    Custom indicator Test EURUSD,M1: loaded successfully
0       11:45:12.922    Test EURUSD,M1: OnInit, создание экземпляра класса.
0       11:45:12.922    Test EURUSD,M1: initialized
0       11:45:17.208    Test_Expert EURUSD,M1: uninit reason 3
0       11:45:17.208    Test EURUSD,M1: uninit reason 3
0       11:45:17.893    Test EURUSD,M5: OnInit, создание экземпляра класса.
0       11:45:17.893    Test EURUSD,M5: initialized
0       11:45:18.149    Test_Expert EURUSD,M5: OnInit экземпляр класса уже создан.
0       11:45:18.149    Test_Expert EURUSD,M5: initialized

 Поначалу списал это на delete, но теперь понимаю, что проблема в другом: индикаторы и советники работают с глобальными переменными по-разному (да, уже давно так, но помнить постоянно об этом трудно). Так, эксперт "помнит" значения своих глобальных переменных при переключении ТФ, а индикатор - нет. Отсюда и возник изначальный пост.

Причина обращения: