2013-03-13 3 views
0

J'ai écrit un petit programme pour tester des vecteurs et je ne comprends pas pourquoi cela se bloque, quelqu'un pourrait-il m'aider? Ignorez les fuites de mémoire pour le moment, ce n'était qu'un exemple rapide.std :: crash de vecteur?

#include <iostream> 
#include <algorithm> 
#include <vector> 

void print(int* i) 
{ 
     std::cout << i << std::endl; 
} 

int main() 
{ 
     std::vector<int*>* intPtr; 

     intPtr->push_back(new int(1)); 
     intPtr->push_back(new int(2)); 
     intPtr->push_back(new int(3)); 

     std::for_each(intPtr->begin(), intPtr->end(), print); 
} 

+4

'intPtr' est un pointeur non initialisé. –

+0

(1) changer 'std :: vecteur * intPtr;' à 'std :: vecteur * intPtr = nouveau std :: vecteur ();' alors (2) [Lire ceci] (http: // dl. dropbox.com/u/6101039/Modern%20C%2B%2B.pdf). – WhozCraig

+0

Correction, merci !! – Shippage

Répondre

1

Vous avez oublié d'initialiser intPtr. Essayez de changer cette ligne à:

std::vector<int*>* intPtr = new std::vector<int*>; 
2
std::vector<int*> intPtr; // no need to make this a pointer. 
+0

Dans cet exemple, il n'y a pas besoin, mais j'en ai fait un pointeur parce que c'était une réplique d'un problème que j'avais dans un plus gros projet à plus petite échelle. – Shippage

+0

@Shippage: Il n'y a tout simplement pas d'utilisation pour 'new std :: vector <>', _ever_. – ildjarn

0

vous devez l'initialiser comme ceci:

std::vector<int*> *intPtr = new vector<int*>();