Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 596

 
Juer:

Ну хорошо. Пусть в OnDeinit() я их удалю. Но у меня сейчас ошибка out of memory уже выскакивает в процессе тестирования... То есть, там до OnDeinit() и не дойдёт.

Значит создаёте кучу объектов-дублей. Потом вообще всё поплывёт, и концов не сыщете.

 
Artyom Trishkin:

Значит создаёте кучу объектов-дублей. Потом вообще всё поплывёт, и концов не сыщете.

А как мне узнать, где именно я не удаляю объекты? Программа-то большая вышла :)

 
Juer:

А как мне узнать, где именно я не удаляю объекты? Программа-то большая вышла :)

Вам бы сначала узнать где, и как вы наплодили такую кучу. Их же там у вас, если мне память не изменяет, десяток тысяч? Это что? Объекты исторических данных? Или что за объекты такие, что их такое количество? Массив объектов - чего?

 
Artyom Trishkin:

Вам бы сначала узнать где, и как вы наплодили такую кучу. Их же там у вас, если мне память не изменяет, десяток тысяч? Это что? Объекты исторических данных? Или что за объекты такие, что их такое количество? Массив объектов - чего?

аа, там много всего. В основном типы свечей и правила. Это сложно ))

 
Juer:

А как мне узнать, где именно я не удаляю объекты? Программа-то большая вышла :)

Вы там случаем не на каждом тике создаете новый объект. Оно конечно можно и так (но как по мне не всегда разумно), но наверно разумней тогда будет сразу по окончанию работы с объектом сдувать его. Только такое объяснение приходит в голову.

 
Juer:

аа, там много всего. В основном типы свечей и правила. Это сложно ))

Кому сложно, а кому-то и нет. Но разгребать теперь всё вам.

Совет. Начните с нуля. Постепенно добавляя нужные объекты в код и глядите что на выходе - если при смене тф или после перекомпиляции вам будет сообщение в журнал о неудалённых объектаъ и утечке памяти, то исправляйте. Далее - опять добавляйте функционал с проверкой на правильное хранение, использование и удаление всех объектов. Удалять их нужно обязательно самому если вы их создаёте посредством new.

 
Konstantin Nikitin:

Вы там случаем не на каждом тике создаете новый объект. Оно конечно можно и так (но как по мне не всегда разумно), но наверно разумней тогда будет сразу по окончанию работы с объектом сдувать его. Только такое объяснение приходит в голову.

На каждой свече.

 
Juer:

На каждой свече.

Ну если вам не нужны предыдущие объекты, то стоит их удалять сразу.

 
Konstantin Nikitin:

Ну если вам не нужны предыдущие объекты, то стоит их удалять сразу.

Да, в том-то и дело. Так всё запуталось, объекты в других объектах и не так просто уже удалить. Одни объекты зависят от других, а те от третьих, которые зависят от первых :)

Жизнь такая сложная :(

 
Juer:

Да, в том-то и дело. Так всё запуталось, объекты в других объектах и не так просто уже удалить. Одни объекты зависят от других, а те от третьих, которые зависят от первых :)

Жизнь такая сложная :(

Эк вы всё позапутали. Не правильное планирование задачи как раз и приводит к таким вот последствиям.

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

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