2012-08-03 19 views
6

Soy bastante nuevo en C++ especialmente STL. Estoy tratando de pasar un vector como argumento a una función, pero hace que la aplicación se cuelgue. Estoy usando Code :: Blocks y MingW. Aquí hay un código simple.Al pasar un vector como argumento y usarlo, ¿por qué falla?

#include <iostream> 
#include <vector> 

using namespace std; 

void foo(const vector<int> &v) 
{ 
    cout << v[0]; 
} 
int main(){ 
    vector<int> v; 
    v[0] = 25; 
    foo(v); 
return 0; 
} 

Gracias!

Respuesta

6

Se bloquea porque se escribe más allá del final del vector con v[0] - es un comportamiento indefinido. Su tamaño inicial es 0 si no haces nada. (Posteriormente, también lee lo mismo, pero todas las apuestas están desactivadas mucho antes de ese punto).

Probablemente quería hacer:

vector<int> v; 
v.push_back(25); 
foo(v); 

O tal vez:

vector<int> v(1); 
v.at(0) = 25; 
foo(v); 

Si utiliza v.at(n) en lugar del operador [] obtendrá excepciones tirado en lugar de un comportamiento indefinido.

+0

Gracias! Debo aprender más sobre STL. ¡Trato un vector como una matriz simple que aparentemente está equivocada! – Physer

+0

@Physer: un vector es similar a una matriz en muchos sentidos. Leer más allá del final del vector no es mejor/peor que leer más allá del final de una matriz. – Flexo

+0

Veo a qué te refieres. Este es un extracto de un código más grande en el que estoy trabajando. Inicialmente le había dado al vector un tamaño v (100) y lo había poblado usando un bucle, como v [i] = valor; ... – Physer

Cuestiones relacionadas