2013-05-17 3 views
0

Obtention d'une erreur d'exécution indiquant "terminate appelée après l'occurrence de lancement de 'std :: bad_alloc'." Je ne suis pas sûr de quoi, je suis assez nouveau en C++.Erreur d'exécution avec le fichier io et les vecteurs (C++)

do 
    { 
     getline(in_stream, tempstr1); 
     itemNumb.push_back(tempstr1); 
     getline(in_stream, tempstr2); 
     itemNumb.push_back(tempstr2); 
     in_stream >> tempdoub; 
     itemCost.push_back(tempdoub); 
     in_stream >> tempint; 
     itemQuant.push_back(tempint); 
     index++; 
    } while (! in_stream.eof()); 
    in_stream.close(); 

Edit: Si avez précisé, itemNumb et itemName sont des vecteurs de chaîne, itemCost est un double vecteur et itemQuant est un vecteur entier. tempstr1 et 2 sont des chaînes, tempdoub est un double, et tempint est un entier.

+0

de quel type est-ce que tempstr2-2? Est-ce que ça dit autre chose? – gpicchiarelli

+1

les chaînes sont trop longues ... – fasked

Répondre

0

La boucle est potentiellement infinie si une opération d'entrée échoue et qu'elle n'est pas provoquée par la fin du fichier, ce qui entraînera éventuellement l'épuisement de la mémoire.

Par exemple:

in_stream >> tempdoub; 

est en train de lire probablement dans un double. Si cela échoue, le flux sera placé dans un mauvais état (failbit est défini) et les lectures suivantes n'auront aucun effet et la fin du fichier ne sera jamais atteinte. Vérifier immédiatement le résultat des opérations d'entrée:

while (getline(in_stream, tempstr1) 
     && getline(in_stream, tempstr2) 
     && in_stream >> tempdoub 
     && in_stream >> tempint) 
{ 
    itemNumb.push_back(tempstr1); 
    itemNumb.push_back(tempstr2); 
    itemCost.push_back(tempdoub); 
    itemQuant.push_back(tempint); 
    index++; 
} 
+0

Je l'ai modifié de cette façon, il ne fait rien, donc je suis sûr que in_stream >> tempdoub et in_stream >> tempint échouent. De toute façon je peux réparer ça? –