|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.06.2009, 16:57 | #1 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
Не уничтожается объект
Доброго времени суток уважаемые эксперты. Пишу класс "нейронная сеть" (хотя для данной проблеммы - это не имеет никакого значения). Если на пальцах то суть такова:
Класс 1 (использует динамический массив типа double); Класс 2 (использует динамический массив типа Класс 1); Класс 3 (использует динамический массив типа Класс 2); Вот собственно вопрос: Второй класс, замечательно согласуется с первым (все объекты уничтожается - операционка спокойна ) А вот третий класс никак не хочет согласовываться со вторым. Точнее он то с ним работает как надо, но почему-то, после завершения работы, не срабатывает ни один деструктор. Я уже не знаю что с ним делать. З.Ы. Исходники прилогаются. З.З.Ы. Пишу на Visual Studio 6.0
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
13.06.2009, 17:24 | #2 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
Ну же ребята. Неужто никто не поможет?
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
15.06.2009, 12:24 | #3 |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
Если еще актуально, то есть следующие идеи. Конкретно про деструкторы не проверял, но похоже, что у тебя там есть битье по памяти, и просто все слетает.
А вообще, есть общие замечания по коду. 1) У тебя в конструкторах классов указатели на массивы не инициализируются в NULL. Потом у тебя в некоторых методах (типа create) стоит вызов delete. Может быть, он и не выполнится, но по сути очень нехорошо. 2) Зачем у тебя в деструкторах обнуляются все переменные? Это никому не нужная работа. 3) Если указатели правильно инициализируются в NULL, то при вызове delete можно не делать проверок на размер массива и т.п., а просто вызывать delete. В нем есть встроенная проверка на NULL. Так что деструктор класса CNeuron, например, должен выглядеть как-то так: Код:
3) Чтобы не париться самому с массивами, лучше использовать какие-нибудь шаблонные классы для массивов. Тогда, к тому же, отпадут все ошибки по их обработке, которые ты мог сделать. 4) Обнулять элементы массива лучше не через цикл по всем элементам, а вызовом функции обнуления памяти, типа memset. 5) В классе CInitArray в операторе [] переданный индекс внутри уменьшается на 1. Знаю по опыту, что такие вещи делать крайне вредно. Это скрытая логика, про которую ты сам через неделю забудешь. Лучше индексировать по-честному от 0. А запрещенный доступ сам ищи Последний раз редактировалось Pashan; 15.06.2009 в 12:34. |
18.06.2009, 17:13 | #4 | |||
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
Цитата:
Цитата:
Цитата:
А нет ли каких-нибудь ограничений на вложенность классов с динамическими массивами? Если я вмест класса CNeuroNet, делаю динамический массив типа CNeuronLayer - проблемм с памятью не возникает.
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
|||
19.06.2009, 00:41 | #5 |
Форумчанин
Регистрация: 16.08.2008
Сообщений: 276
|
Ура!!! Разобрался. Просто нужно было изменить класс CNeuroNet:
Код:
Искусственный интеллект - фигня по сравнению с естественной глупостью
|
19.06.2009, 12:58 | #6 | ||
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
Цитата:
Цитата:
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
объект класса TBItmap | albatros | Мультимедиа в Delphi | 3 | 27.03.2009 16:23 |
задача на объект | Romer9999 | Помощь студентам | 9 | 27.02.2009 12:00 |