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
.
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 utilizandoa[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 detemp
, el cual se añade al vectora
. 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.