Я создал структуру для хранения некоторых данных, а затем объявил вектор для этой структуры.
Но когда я делаю push_back, я получаю чертово segfault, и я понятия не имею, почему!
Моя структура определяется как:
typedef struct Group
{
int codigo;
string name;
int deleted;
int printers;
int subpage;
/*included this when it started segfaulting*/
Group(){ name.reserve(MAX_PRODUCT_LONG_NAME); }
~Group(){ name.clear(); }
Group(const Group &b)
{
codigo = b.codigo;
name = b.name;
deleted = b.deleted;
printers = b.printers;
subpage = b.subpage;
}
/*end of new stuff*/
};
Изначально структура не имела копии, конструктора или деструктора. Я добавил их позже, когда прочитал этот пост ниже.
Ошибка сегмента после того, как элемент помещен в контейнер STL
но конечный результат тот же.
Есть одна такая, которая чертовски беспокоит меня! Когда я впервые помещаю некоторые данные в вектор, все идет хорошо. Позже в коде, когда я пытаюсь вставить еще какие-то данные в вектор, мое приложение просто segfaults!
Вектор объявлен
vector<Group> Groups
и является глобальной переменной для файла, в котором я ее использую. Больше нигде нет и т.д ...
Я могу отследить ошибку до:
_M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage- this->_M_impl._M_start);
в vector.tcc, когда я заканчиваю добавлять / копировать последний элемент в вектор ....
Насколько я могу судить. Мне не нужно ничего делать с конструктором копирования, так как для этого должно быть достаточно мелкой копии. Я даже не выделяю места (но я сделал резерв для строки, чтобы попробовать).
Понятия не имею, в чем проблема!
я запускаю этот код в OpenSuse 10.2 с gcc 4.1.2
Мне не очень хочется обновлять gcc из-за проблем с обратной совместимостью ...
Этот код работал "отлично" на моей машине с Windows. Я скомпилировал его с gcc 3.4.5 mingw без проблем ...
помощь!
--- ... ---
::: РЕДАКТИРОВАТЬ :::
я нажимаю данные
Group tmp_grp;
(...)
tmp_grp.name = "Nova ";
tmp_grp.codigo=GetGroupnextcode();
tmp_grp.deleted=0;
tmp_grp.printers=0;
tmp_grp.subpage=0;
Groups.push_back(tmp_grp);