2010-08-11 4 views
0

Le programme suivant continue de se bloquer et je n'arrive pas à comprendre ce qui ne va pas. Il semble que c est en quelque sorte pas dans la fonction principale ..Le vecteur de retour C++ ne peut pas comprendre ce qui ne va pas

#include <iostream> 
#include <vector> 

using namespace std; 

vector<string> *asdf() 
{ 
    vector<string> *v = new vector<string>(); 
    v->push_back("blah"); 
    v->push_back("asdf"); 
    return v; 
} 

int main() 
{ 
    vector<string> *v = NULL; 
    v = asdf(); 

    for (int i=0; i<(v->size()); v++) { 
     cout << (*v)[i] << endl; 
    } 

    delete v; 

    return 0; 
} 
+0

Lol plus stupide bug jamais je suppose, thx pour l'aide! – Nils

+0

Vous devriez vous débarrasser de l'allocation dynamique dans ce code, il n'y a aucune raison pour cela. – GManNickG

+0

Eh bien, c'était juste un exemple stupide. – Nils

Répondre

7

Vous voulez:

for (int i=0; i<(v->size()); i++) { 

Votre code est incrémente le pointeur, pas l'index. ce qui est une bonne raison d'éviter d'allouer dynamiquement des choses, dans la mesure du possible.

+3

Utiliser un itérateur est même préférable IHMO –

+3

@Little Depends - pour les opérateurs vectoriels [] est généralement plus court, plus clair et peut même être un peu plus rapide. –

+0

Il pourrait aussi être plus lent. Par exemple si le runtime exécute des limites en vérifiant comme MSVC par défaut dans certaines versions. – jalf

3

Vous devez changer v ++ i ++

Questions connexes