Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я обнаружил ошибку в CDictionary. Когда вы используете метод Reset, он удаляет объект CList в m_data. Последующие вызовы других методов, которые получают точку из словаря, получают в ответ плохой указатель. Пример:
Я бы предложил следующее исправление для всех методов, использующих хэш ключей для доступа к объекту CList из массива m_data.
Я обнаружил ошибку в CDictionary. Когда вы используете метод Reset, он удаляет объект CList в m_data. Последующие вызовы других методов, которые получают точку из словаря, получают в ответ плохой указатель. Пример:
Я бы предложил следующее исправление для всех методов, использующих хэш ключей для доступа к объекту CList из массива m_data.
Спасибо, Николи Шен. Ваше решение является "более безопасным". Однако я не могу воспроизвести проблему.
Меня беспокоит еще одна вещь, связанная с этим: указатель на объект должен быть способен принимать нулевое значение. m_data - это динамический массив, поэтому он должен возвращать null, когда из массива извлекается незаполненный индекс или удаляется хранимый элемент. Сохранение данных из m_data в CList* без предварительной проверки указателя происходит и в других методах, таких как Get() и Delete(), поэтому приведенные выше тестовые сценарии также должны завершиться неудачей, если эта проблема существует. Простое присваивание между одним указателем и другим может быть выполнено без каких-либо ошибок доступа к указателю, даже если объект, на который указывает значение lvalue, уже удален:
Проблема может быть сведена к приведенному выше примеру. Но в этом случае ошибок с указателями не возникает. Мне интересно, потому что я помню, что столкнулся с этой же проблемой в более ранней сборке, которая была быстро исправлена.
В настоящее время я использую MT5 build 1932, но дайте мне знать, если я что-то упустил.
У меня такая ошибка:
'Key' - неожиданная лексема, возможно, тип отсутствует? Dictionary.mqh 39 23
'Key' - функция уже определена и имеет другой тип Dictionary.mqh 39 23
см. объявление 'CDictionaryEntryBase::Key' Dictionary.mqh 20 22
пытаюсь установить на билд 3320
У меня такая ошибка:
'Key' - неожиданный токен, возможно, тип отсутствует? Dictionary.mqh 39 23
'Key' - функция уже определена и имеет другой тип Dictionary.mqh 39 23
см. объявление 'CDictionaryEntryBase::Key' Dictionary.mqh 20 22
пытаюсь установить на билд 3320