IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Список. Удаление, Builder 6.0
сообщение
Сообщение #1


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Список содержит указатели на элементы.
Необходимо удалить i-ый элемент списка, при этом удалить и сам элемент.
Я делаю так

it += Index;
delete *it;
m_List.erase(it);


Всё работает если Index = 0, или если нет строки delete *it.
А если удалить элемент с индексом больше 0 (меньше размера списка), то при следующем проходе по списку
вылетает ошибка по доступу к памяти...как правильно сделать?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Fanat, я не совсем понимаю, откуда у тебя берутся leak-и... Вот смотри:

class TMyList: public list<int*>
{
friend
TMyList::iterator&
operator + (TMyList::iterator &it, int index) {
for(; index; --index) ++it;
return it;
}

public:
void erase_element(int index) {
TMyList::iterator it = begin();
delete *(it = (it + index));
erase(it);
}

~TMyList() {

for(TMyList::iterator
it = begin(); it != end(); delete *it++) {
}
}
};

void __fastcall TForm1::Button2Click(TObject *Sender)
{
TMyList myList;

for(int i = 0; i < 20; i++) {
int *p = new int(i);
myList.push_back(p);
}

myList.erase_element(5);

for(TMyList::iterator it = myList.begin();
it != myList.end(); it++)
{
Memo2->Lines->Add(IntToStr(*(*it)));
}
}

Код аналогичен твоему, правда? Ну, за исключением некоторых мелочей... Только почему-то у меня CodeGuard молчит... Попробуй у себя прогнать это, будет ругаться?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 15:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name