Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 596
от 28.11.2006, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 430, Экспертов: 49
В номере:Вопросов: 1, Ответов: 1


Вопрос № 63785: Здравствуйте! У меня такой вопрос! У меня есть класс (см. приложение). Функция bool NewKl (int id) добавляет в дерево новый элемент, вставляя его после id-го по индексу. Корень дерева заведомо существует (создаётся в конструкторе). Функция ра...

Вопрос № 63.785
Здравствуйте!
У меня такой вопрос!
У меня есть класс (см. приложение). Функция bool NewKl (int id) добавляет в дерево новый элемент, вставляя его после id-го по индексу. Корень дерева заведомо существует (создаётся в конструкторе). Функция работает правильно (в отладчике (f5)- всегда), но при запуске (ctrl+f5) в определённом сочетании команд вылезает ошибка. Отловить её я не могу, т.к. в пошаговом запуске ошибки нет. Но если вставить в код вывод, то ошибка исчезает. Помогите, пожалуйста!

der.NewKl (0);
der.NewKl (1);
der.NewKl (1);
der.NewKl (2);
der.NewKl (2);
der.NewKl (2); //на этом шаге ошибка

bool CMyTree::NewKl (int id)
{
Kletka* x; //for (int i=0; i<1000; i++);
//cout << 12 << 12 << ' '; Если добавить этот вывод, то ошибка исчезает
der = Poisk (&root, id);
if (der!=NULL) {
x=new Kletka;
kol++;
x->ind=kol;
x->zar=10;
x->kp=0;
x->deti=NULL;
x->rod=der;
if (der->kp==0) {
der->deti=new Kletka*; der->deti[0]=new Kletka; der->deti[0]=x;
der->kp=1;
} else {
der->deti[der->kp]=new Kletka; der->deti[der->kp]=x; der->kp++;
}
return true;
}
return false;
}

И ещё вопрос: надо ли дополнительно освобождать память из-под переменной der->deti (и если надо, то как - простой delete не проходит), если я уже удалила все der->deti[i]?

Приложение:

Отправлен: 23.11.2006, 00:17
Вопрос задала: Verena (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: LeoGann
Здравствуйте, Verena!
Не буду точно утверждать так как, код предаставлен не весь, но мне кажется (практически уверен) что ошибка здесь
struct Kletka {
int ind; //индекс
int zar;
int kp;
Kletka* rod;
Kletka** deti; <-- вот здесь ошибка;
};
вы не виделяете память под массив указателей на детей
попробуйте воспользоваться vector ом для хранения ссылок на детей
struct Kletka {
...
std::vetor<Kletka*> deti;
}

Возникнут вопросы пишите.
Ответ отправил: LeoGann (статус: 1-ый класс)
Ответ отправлен: 23.11.2006, 09:40


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное