[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: g++



On Tue, 23 Apr 2002, alexander saltanov wrote:

> AS>                 cout << "\t" << *p << endl;
> AS>                 paths.push_back(p, "2");
> AS>                 ^^^^^^^^^^^^^^^^^^^^^^^^
> 
> должно быть так:    paths.push_back("2");
> но всё равно, на потате происходит segfault.

 На RH72 - тоже (там gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)).

 Попробовал заменить vector<string> на vector<int>
 Падает на 16383-ем элементе.

 Так и должно происходить - элемент добавляется в вектор, по которому идет
итерация, и в конце концов realloc(), вызываемый из ф-ий шаблона класса
vector, возвращает адрес отличный от прежнего начала вектора - и посему
указатель выходит за пределы выделенной памяти и получаем SIGSEGV.

 Если хочется добавляеть эл-ты в контейнер в процессе итерации по нему, надо
использовать list, а не vector или deque.

 Best regards,
  -Vlad


--
To UNSUBSCRIBE, email to debian-russian-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org



Reply to: