Creé una estructura para contener algunos datos y luego declare un vector para mantener esa estructura.segfault en el vector <struct>
Pero cuando hago un push_back me sale maldito segfault y no tengo ni idea de por qué!
Mi estructura es define como:
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*/
};
Originalmente, la estructura no tenía la copia, constructor o destructor. Los agregué más tarde cuando leí esta publicación a continuación.
Seg fault after is item pushed onto STL container
pero el resultado final es el mismo.
¡Hay uno que me está molestando! Cuando primero introduzco algunos datos en el vector, todo va bien. ¡Más adelante en el código cuando intento introducir más datos en el vector, mi aplicación simplemente falla!
El vector se declara
vector<Group> Groups
y es una variable global para el archivo donde lo estoy usando. No hay ningún otro lugar los externos, etc ...
puedo rastrear el error a:
_M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage- this->_M_impl._M_start);
en vector.tcc cuando termino de la adición/copiar el último elemento al vector ....
Por lo que puedo decir. No debería necesitar nada que ver con un constructor de copias, ya que una copia superficial debería ser suficiente para esto. Ni siquiera estoy asignando espacio (pero reservé la secuencia para probar).
¡No tengo idea de cuál es el problema!
estoy corriendo este código en OpenSuse 10.2 con gcc 4.1.2
No estoy realmente a ansiosos por mejorar gcc debido a problemas de compatibilidad hacia atrás ...
Este código funcionó "perfectamente" en mi máquina de Windows. Lo compilé con gcc 3.4.5 mingw sin ningún problema ...
ayuda!
--- ... ---
::: ::: EDITAR
empujo datos
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);
Mostrar el código que lo empuja por favor. –
Su estructura no necesita el constructor de copia, y es una mala idea proporcionarla: el constructor de copia predeterminado hace todo lo que necesita. Tampoco necesita el typedef en la estructura.Tampoco necesita el destructor, y probablemente no el constructor que toma un tamaño. –
@Neil. ¡Lo sé! Los agregué por "desesperación" –