Erreur de segmentation.

Erreur de segmentation. - C++ - Programmation

Marsh Posté le 04-12-2018 à 19:27:00    

Yo j'ai un petit souci avec mon code ... voilà il se compile mais lorsque je l’exécute, j'ai un problème de segmentation, j'ai tout essayé, j'ai demandé à des mecs de ma promo vraiment bons mais personne trouve !
 
il nous demande de faire un programme  , ( http://nicolas.thiery.name/Enseign [...] projet.pdf la consigne exercice 4 questions 1 )  
[Dans le fichier dechets-tableaux.cpp , complétez la fonction litTableauInt qui transforme un fichier en un tableau 2 dimensions. Testez votre fonction avec les tests proposes.] Le fichier avec les données : http://www.noelshack.com/2018-49-2 [...] -43-17.png
 
mon code : (j'ai oublié return t à la fin )

Code :
  1. #include <stdexcept>
  2. /** @file **/
  3. #include <fstream>
  4. #include <iostream>
  5. #include <vector>
  6. #include <string>
  7. using namespace std;
  8. /** Infrastructure minimale de test **/
  9. #define ASSERT(test) if (!(test)) cout << "Test failed in file " << __FILE__ << " line " << __LINE__ << ": " #test << endl
  10. /** Construction d'un tableau 2D d'entiers lu depuis un fichier
  11. * @param fichier le nom d'un fichier contenant un nombre fixe
  12.   * d'entiers par lignes, séparés par des espaces
  13. * @param nb_colonnes le nombre de colonnes du fichier
  14. * @return un tableau d'entiers à  deux dimensions
  15. **/
  16. vector<vector<int>> litTableauInt(string nom_fichier, int nb_colonnes) {
  17.     vector<vector<int> t ;
  18.     ifsteam fichier (nom_fichier);
  19.     int entier;
  20.     for(int i= 0; i < 13; i++){
  21.         for(int j = 0; j < nb_colonnes; j++){
  22.             while (fichier >> entier ) {   t[i][j = entier ;
  23.         } } }
  24.         return t
  25. }
  26. /** Test de la fonction litTableauInt **/
  27. void testLitTableauInt() {
  28.     vector<vector<int>> t = litTableauInt("donnees/tonnages_des_dechets_bacs_jaunes.txt", 13);
  29.     ASSERT(t[0][0] == 75007);
  30.     ASSERT(t[3][5] == 876);
  31.     ASSERT(t[19][12] == 235);
  32. }
  33. int main() {
  34.    testLitTableauInt()
  35. }


 
 
 
 
ALORS quelqu'un peut m'aider pour ce problème de segmentation ??

Reply

Marsh Posté le 04-12-2018 à 19:27:00   

Reply

Marsh Posté le 04-12-2018 à 20:11:15    

Bonjour ! Vous ne pouvez pas ajouter comme ça des éléments à un std::vector comme si c'était un tableau simple.
 
Vous devez soit faire des push_back, soit effecuer, avant, des resize, puis accéder aux éléments par leur indice.
 
Comme les tableaux sont de taille connue, il suffit de leur donner la bonne taille au départ et ça ira très vite.
 


---------------
On n'est jamais très fort pour ce calcul !
Reply

Marsh Posté le 04-12-2018 à 21:26:55    

Farian a écrit :

Bonjour ! Vous ne pouvez pas ajouter comme ça des éléments à un std::vector comme si c'était un tableau simple.
 
Vous devez soit faire des push_back, soit effecuer, avant, des resize, puis accéder aux éléments par leur indice.
 
Comme les tableaux sont de taille connue, il suffit de leur donner la bonne taille au départ et ça ira très vite.
 


 
 
Je vous avoue que je suis pas très bon, je commence donc pouvez vous m'expliquez autrement ?  

Reply

Marsh Posté le 05-12-2018 à 00:43:20    

Ce qu'on te dit, c'est que tu peux pas faire
while (fichier >> entier ) {   t[i][j] = entier ;
parce que tu sais pas si ton vecteur (de vecteur) est assez grand.
Un vecteur ça peut croitre ou diminuer, mais à condition d'utiliser ses méthodes ad-hoc.
http://www.cplusplus.com/reference [...] push_back/
ou alors il faut le faire assez grand au départ
http://www.cplusplus.com/reference [...] or/vector/
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed