es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de segmentación al obtener la entrada desde un vector 2D.

Obtengo una falla de segmentación cuando corro el código de abajo.

int main()
{
int R, C, val;
cin>>R>>C;
vector<><int>> a;
for(int i = 0; i < R; i++)
{
    for(int j = 0; j < C; j++)
    {
         cin>>val;
         a[i].push_back(val);
    }
}

Pero cuando lo cambio a esto, parece funcionar. ¿Cuál es la razón?

int main()
{
int R, C, val;
cin>>R>>C;
vector<><int>> a;
for(int i = 0; i < R; i++)
{
    vector<int>temp;
    for(int j = 0; j < C; j++)
    {
         cin>>val;
         temp.push_back(val);
    }
    a.push_back(temp);
}

Obtengo la misma falla sin importar cuál sea el valor de R y C.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la que ocurre un error de segmentación es que en el primer código, el vector de vectores a no está inicializado con ningún tamaño, por lo que al acceder a los elementos utilizando a[i], esto resulta en un comportamiento indefinido.

    En el segundo código, se crea un nuevo vector temp cada vez que se ejecuta el ciclo externo, y el ciclo interno empuja los valores dentro de temp, el cual se añade al vector a. Esto crea una nueva fila para la matriz en cada iteración y evita el comportamiento indefinido visto en el primer código.

    Por lo tanto, es importante inicializar los vectores antes de acceder a ellos o empujar elementos en ellos como se muestra en el segundo código para evitar errores de segmentación u otro comportamiento indefinido.

Comments are closed.