2017-04-08 4 views
0

J'ai fait quelques lectures sur la façon de créer un nombre défini de tableaux et de remplir ces tableaux en utilisant des boucles for C++. Partout dit que j'ai besoin d'utiliser des vecteurs. J'ai créé les tableaux et les ai peuplés en utilisant des vecteurs (je pense). Lorsque je compile et que je cours avec l'affichage des tableaux, tout va bien. Lorsque j'essaie d'afficher le contenu des tableaux, le programme compile ok mais se bloque lorsque je l'exécute. J'essaye de créer 100 tableaux avec leur taille augmentant de 500 éléments à chaque fois. (Ceci est pour une mission où nous avons besoin de tester l'efficacité d'un algorithme.)Affichage des vecteurs sur l'écran

unsigned int numArrays = 100; 
unsigned int arraySize = 0; 
//Create holder variable: 
unsigned int randomInt = 0; 
//Create the arrays: 
std:vector<std::vector<int> > arrays(numArrays); 

for(std::size_t i=0; i< numArrays; i++){ 

    arraySize = i * 500; 
    vector<int> temp; 
    temp.reserve(arraySize); 

    for(int j=0; j< arraySize; j++){ 

     //Generate Random number: 
     randomInt = rand(); 
     //Add the number to the array: 
     temp.push_back(randomInt); 

    } 
    arrays.push_back(temp); 
} 


for(int i=0; i<arrays.size(); i++){ 

    cout << "{"; 
    for(int j=0; j<arrays.at(i).size() - 1; j++){ 

     cout << arrays.at(i).at(j) << ","; 

    } 
    cout << arrays.at(i).back() << "}" << endl; 
} 

Je suppose que l'erreur est quelque part dans les boucles imbriquées finales mais je ne suis pas sûr. Merci d'avance.

+0

Rien ne me frappe tout de suite. Mais avez-vous essayé de déboguer le programme? en utilisant gdb? Vous devriez être en mesure de l'exécuter et ensuite revenir à l'endroit où l'erreur s'est produite – silvergasp

Répondre

1
std:vector<std::vector<int> > arrays(numArrays); 

Ici vous initialiser votre vecteur numArraysvector<int> vide s.
Mais alors vous ajoutez vos nouveaux vecteurs. Ce qui signifie que vous avez à la fin 2*numArrays vecteurs.

L'accident provient de la première moitié des vecteurs:

  • le moins dans une j<arrays.at(i).size() - 1: size() renvoie un 0 non signé, moins 1 est la valeur maximale. Essayant d'obtenir un dernier élément non existant.
  • arrays.at(i).back()

Pour résoudre le problème, remplacez cette ligne

std::vector<std::vector<int> > arrays(numArrays); 

par

std::vector<std::vector<int> > arrays; 
arrays.reserve(numArrays); 

Et ajouter un test pour ness non empty() avant de calculer size() - 1.

+0

Je suis encore un peu confus. Comment puis-je résoudre ce problème? J'ai fatigué d'enlever cette ligne mais elle s'est tout de même écrasée. (Je suis extrêmement nouveau en C++) –

+1

@ChristopherLittlewood Modifier cette ligne 'std: vecteur > tableaux (numArrays);' à ce 'std: vecteur > tableaux;'. Le programme se fermera car une exception sera lancée de 'std :: vector :: at()', et accessoirement vous n'avez fait aucune tentative pour intercepter une telle exception. Cependant, je ne crois pas que vous aurez besoin de. Faites simplement le changement suggéré et cela devrait fonctionner. – silvergasp

+0

@ChristopherLittlewood Voir les réponses éditées. –