Название: Инициализация новых объектов списка указ Отправлено: Karl-Philipp от Июль 25, 2008, 10:43 помогите, пожалуйста, разобраться:
есть класс Код: class CustomClass есть список Код: list< Customclass* >cCList; Список в процессе работы программы заполняется. В какой-то момент список должен заполняться объектами, данные для которых берутся из объектов этого же списка (с помощью итератора). Код: list< CustomClass* >::iterator cCIterator = cCList.begin(); сомневаюсь, что это правильное заполнение списка :) Подскажите, пожалуйста, как надо? Название: Re: добавление в список указателей на объекты с данными из этого же списка Отправлено: EhTemka от Июль 25, 2008, 14:19 Цитировать Список в процессе работы программы заполняется. В какой-то момент список должен заполняться объектами, данные для которых берутся из объектов этого же списка (с помощью итератора). Code: Код: list< CustomClass* >::iterator cCIterator = cCList.begin(); сомневаюсь, что это правильное заполнение списка Smiley Само заполнение списка правильное, правда всё это как-то странно... Зачем тебе new CustomClass( (*cCIterator)->k, (*cCIterator)->b ), если он у тебя уже есть (т.е. сам (*cCIterator))? Но тут канечно вопрос проектирования, может зачем и нужно :) Название: Re: добавление в список указателей на объекты с данными из этого же списка Отправлено: Karl-Philipp от Июль 25, 2008, 14:58 ... Само заполнение списка правильное, правда всё это как-то странно... Зачем тебе new CustomClass( (*cCIterator)->k, (*cCIterator)->b ), если он у тебя уже есть (т.е. сам (*cCIterator))? Но тут канечно вопрос проектирования, может зачем и нужно :) извините - завтыкал. Вместо (*cCIterator)->b должно быть определенное значение. Привожу также конструктор: Код: CustomClass::CustomClass(int &k, bool &bValue) Меня интересует использование (*cCIterator)->k в Код: cCList.push_back( new CustomClass( (*cCIterator)->k, true ) ); Почему спросил: релизная версия программы работает как надо. При работе дебажной версии появляется ошибка. Отладчиком выследил, что ошибка появляется в месте заполнения списка. Название: Re: добавление в список указателей на объекты с данными из этого же списка Отправлено: Tonal от Июль 25, 2008, 17:23 А зачем у тебя там вообще ссылки в параметрах конструктора?
Ссылки без константности могут быть нужны в двух случаях: 1) В функции изменяется значение фактического параметра - у тебя этого нет в приведённом коде. 2) Одно из полей класса - ссылка, и мы хотим её инициализировать фактическим параметрам - у тебя не этот случай, т.к. это производится в списке инициализации. Т.е. в данном случае ссылки можно просто убрать из кода. :) Название: Re: добавление в список указателей на объекты с данными из этого же списка Отправлено: Karl-Philipp от Июль 25, 2008, 17:37 спасибо, Тонал, убрал ссылки из конструктора, но эффект тот же - дебажная программа валится. Не пойму почему же программа валится при добавлении объекта в список ???
Название: Re: добавление в список указателей на объекты с данными из этого же списка Отправлено: spirit от Июль 25, 2008, 18:37 а можно выложить компилябильный код? :)
Название: Инициализация новых объектов списка указателей данными из этого же списка Отправлено: Karl-Philipp от Июль 25, 2008, 19:04 а можно выложить компилябильный код? :) в этом случае мне придется выложить весь проект, поскольку с объектами класса происходят всякие преобразования на разных этапах выполнения программы и вряд ли кто захочет перерыть пару тыщ строк, а может и больше :)Я уж лучше сам покопаюсь, а потом расскажу про решение проблемы. Похоже, что дело не в списке указателей на объекты, а в том, что инициализирую новый объект данными из несуществующего объекта. Как-то мне советовали использовать Ассерты, а я пропустил это дело мимо ушей и вот результат - попал, похоже, на знакомые грабли :( Название: Re: Инициализация новых объектов списка указ Отправлено: EhTemka от Июль 27, 2008, 22:46 А что пишет дебагер?
Название: Re: Инициализация новых объектов списка указ Отправлено: Red Devil от Июль 28, 2008, 10:46 Цитировать сомневаюсь, что это правильное заполнение списка С виду ничего криминального нет, но есть одно но. У тебя список может быть пусто, когда ты берешь итератор на begin.Цитировать в этом случае мне придется выложить весь проект, поскольку с объектами класса происходят всякие преобразования на разных этапах выполнения программы и вряд ли кто захочет перерыть пару тыщ строк, а может и больше Возможно преобразования выполнены неверно, поэтому и валится при попытке обращения не к тому участку памяти.Что за компилятор, кстати ? Название: Re: Инициализация новых объектов списка указ Отправлено: Karl-Philipp от Сентябрь 26, 2008, 16:50 компилятор из VS7.0
Да, именно преобразования были выполнены не верно - прочесал всю программу с помощью дебагера раз с тыщу :) - не помогло Дело в том, что в отдельных объектах создаются списки других объектов, в них то и была ошибка, точнее при обращении к ним. Короче открыл для себя мир исключений и их обработки в С++ :) |