Я создал структуру для хранения некоторых данных, а затем объявил вектор для хранения этой структуры.segfault on vector <struct>
Но когда я делаю 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*/
};
Первоначально структура не имеет копии, конструктор или деструктор. Я добавил их позже, когда прочитал этот пост ниже.
Seg fault after is item pushed onto STL container
но конечный результат один и тот же.
Существует один такой, который беспокоит меня как ад! Когда я сначала вставляю некоторые данные в вектор, все идет хорошо. Позже в коде, когда я пытаюсь вставить еще несколько данных в вектор, мое приложение просто 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 3.4.5 mingw без проблем ...
help!
--- ... ---
::: РЕДАКТИРОВАТЬ :::
нажимаю данные
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);
Показать код, который выталкивает его, пожалуйста. –
Ваша структура dos не нуждается в конструкторе копирования, и это плохая идея предоставить его - конструктор копирования по умолчанию делает все, что вам нужно. Вы также не нуждаетесь в typedef в структуре.Он также не нуждается в деструкторе и, вероятно, не в конструкторе, который принимает размер. – 2010-04-29 17:22:14
@Neil. Я знаю! Я добавил их из «отчаяния» –