2012-07-03 1 views
0

Par coïncidence, le code semble échouer à la valeur exacte de la valeur max d'un court non signé.L'accès à l'opérateur de pointeur de l'itérateur à 65536 position provoque la segfault

map<int,vector<string> > backofflist; 

for (int k = backofflist.size(); k > 0; k--) // for ($i=$#backofflist;$i>0;$i--) 
{ 
    vector<string>::iterator backofflist_iter; 
    int i = 0; 
    for (backofflist_iter=backofflist[k].begin(); 
     backofflist_iter!=backofflist[k].end(); 
     backofflist_iter++) // foreach $x (@($backofflist[$i])) 
    { 
     cout << i++ << endl; 
     string x; 
     try 
     { 
      x = *backofflist_iter; //foreach $x (@{$backofflist[$i]}) 
     } 
     catch (exception &e) 
     { 
      cout << e.what() << endl; 
      exit(1); 
     } 

produit la sortie suivante:

... 
65532 
65533 
65534 
65535 
65536 
{segfault} 

Je pensais que les vecteurs ont une capacité illimitée? Y a-t-il quelque chose qui me manque? J'écris ce programme sur XCode dans Snow Leopard.

+3

Vérifiez l'attribut max_size sur votre vecteur. – Whyrusleeping

+1

Vous n'avez pas montré toute la boucle; Y a-t-il quoi que ce soit à l'intérieur qui ajoute ou supprime quelque chose de 'backofflist' ou' backofflist [k] '? –

+0

Désolé, j'ai oublié de mentionner que le code échoue à: x = * backofflist_iter; – saigafreak

Répondre

3

La seule solution à ce problème est que vous avez inséré un std::vector mauvais dans la carte avant que ce code soit appelé, ou autrement endommagé un std::vector existant. Cette section spécifique du code est toujours un comportement bien défini, si ce n'est nécessairement le comportement que vous attendez si backofflist n'est pas plein avec les clés que vous attendez.

Bien sûr, l'indentation suggère que ce n'est pas toute votre boucle, et c'est peut-être là que réside le problème.

0

Essayez de commenter cette ligne

x = *backofflist_iter; //foreach $x (@{$backofflist[$i]}) 

recompilation, puis collez la réponse. Si vous avez un autre segfault. imprime le message d'erreur complet.

Questions connexes