Pregunta sobre c++, declaration, stl, stdvector, vector – Inicialización de vectores en C ++

1

Estoy usando vectores en mi código.

La línea que está causando el error es la siguiente:

<code>vector<Node> alt_seq ;
alt_seq = vector<Node>(1000);
for(int j=0; j<alt_cf.getNoOfNodes(i); j++)
{
    Node temp_node = *alt_itr;
    alt_itr++;
    alt_seq.push_back(temp_node);
    }
</code>

La línea :

<code> alt_seq.push_back(temp_node);
</code>

provoca un error de tiempo de ejecución. Sin embargo si inicializo el Vector con algún tamaño inicial como sigue:

<code>vector<Node> alt_seq(1000) ;
</code>

En este caso el código funciona bien. Sin embargo, no quiero dar un tamaño inicial, ya que la cantidad de objetos en el vector será variable en el tiempo de ejecución. Por favor, ayúdame. Soy nuevo con C ++.

Para su referencia, la función completa del Método está aquí:

http://pastebin.com/2dUFEui5

pastebin.com/zDbJikK7 Este es el enlace a node.h y node.cpp Abhinav Arora
@dirkgently Enlace a node.h y node.cpppastebin.com/zDbJikK7 Abhinav Arora
Por cierto, el enlace pastebin no tiene la definición de claseNode ya sea. dirkgently
Parece un problema con la claseNodeLas tres grandes implementaciones. ¿Nos puede mostrar la definición deNode? dirkgently

Tu respuesta

2   la respuesta
0

vector objetos y luego hacer unapush_back está agregando al final del vector, es decir, los objetos que está intentando agregar están en 1001, 1002 ... etc. Si declara 1000vector los objetos no le dan un error de tiempo de ejecución, primero vería cuál es la definición predeterminada (ya que los primeros 1000 objetos de nodo tienen valores predeterminados), ya que no es error y se compara con los datos reales que estoy intentando cargar. Espero que esto ayude.

3

Node clase tiene un puntero miembro de tipoCombinedFragment* llamadocfrag. Esto crea referencias pendientes si no definió sus propios operadores de copia y asignación. Además, se requiere un dtor adecuado para evitar fugas siNode es responsable de asignar / desasignarcfrag. Si no quieres hacer una copia profundaCombinedFragment puedes usar unshared_ptr.

Además, el ctor por defecto paraNode Probablemente ni siquiera necesite estar allí (dejacfrag a un estado no inicializado).

Gracias, lo intentaré ... Si desea ver otras clases en el proyecto, el código se puede encontrar en GitHubgithub.com/abhinavarora/mbt Abhinav Arora
@AbhinavArora: ¡Intenta agregar los tres grandes apropiados y volver si eso no resuelve tu problema! dirkgently
this->cfrag = frag; Me parece sospechoso. Cuando copia, está haciendo un par de punteros apuntando a la mismaCombinedFragment objeto. Ahora, si uno de ellos se elimina, el otro se convierte en un puntero colgante. Cualquier acceso a esecfrag objeto es UB. Así que, en lugar de un puntero en bruto, intente usar unshared_ptr<CombinedFragment> como miembro para que incluso después de eliminar unNode Objeto que no pierdas elCombinedFragment objeto compartido con otro vivoNode objetos. HTH. dirkgently
Como dijiste, agregué los tres grandes como siguepastebin.com/g2n14awz  Por favor, hágamelo saber si esta adición es correcta. A pesar de hacer los cambios anteriores, todavía da un error de tiempo de ejecución. Por favor ayuda. Estoy fallando en entender mi error. Abhinav Arora

Preguntas relacionadas