Bonjour à tous,
je viens vous voir parce que je sèche la.
voici le code et les explications apres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 /* * Initialise tab_carte avec les données du fichier carte. * met a jour le nombre de lignes et de colonnes du tableau */ void carte::init_tab_carte(char* carte) { ifstream fichier_carte(carte, ios::in); //ouverture du fichier carte en lecture if(fichier_carte) { cout << "fichier ouvert : " << carte << endl; char ch; //un carractère du fichier int nb_ligne_tab_carte = 1; tab_carte.resize(nb_ligne_tab_carte); //allocation de la premiere ligne tab_carte.size() vaut 1 while(fichier_carte.get(ch)) //tant qu'on récupère un carractère { cout << ch; if(ch == '\n') { nb_ligne_tab_carte++; tab_carte.resize(nb_ligne_tab_carte); } if(ch == '0') { tab_carte[nb_ligne_tab_carte - 1].push_back(0); } if(ch == '1') { tab_carte[nb_ligne_tab_carte - 1].push_back(1); } if(ch == '2') { tab_carte[nb_ligne_tab_carte - 1].push_back(2); } if(ch == '3') { tab_carte[nb_ligne_tab_carte - 1].push_back(3); } } fichier_carte.close(); cout << "fichier fermé : " << carte << endl; for (unsigned int i = 0; i < tab_carte.size(); i++) { for (unsigned int j = 0; j < tab_carte[i].size(); j++) { cout << tab_carte[i][j]; } cout << endl; } //récupération du nombre de tuille en x et y; nb_tuile_en_x = tab_carte[0].size(); // on récupère la taille du tableau en X nb_tuile_en_y = tab_carte.size(); // on récupère la taille du tableau en y cout << "nombre de tuile en x : " << nb_tuile_en_x << endl; cout << "nombre de tuile en y : " << nb_tuile_en_y << endl; this->trier_tuile_carte(); } else { cerr << "impossible d'ouvir le fichier : " << carte << endl; } }Ma première fonction rempli un tableau avec les éléments d'un fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 /* * tri tab_carte et rempli les trois de tableau de coordonnées */ void carte::trier_tuile_carte() { cout << endl << "trier" << endl; //chaque table contient deux vecteurs : pour la coord en x et y tab_coord_case_bloquante.resize(2); tab_coord_case_checkpoint.resize(2); tab_coord_case_depart.resize(2); for (int j = 0; j < (nb_tuile_en_y - 1); j++) { for (int i = 0; i < (nb_tuile_en_x - 1); i++) { if(tab_carte[i][j] == 1) { tab_coord_case_bloquante[0].push_back((float)i * largeur_carre_tuile); tab_coord_case_bloquante[1].push_back((float)j * largeur_carre_tuile); } if(tab_carte[i][j] == 2) { tab_coord_case_checkpoint[0].push_back(i * largeur_carre_tuile); tab_coord_case_checkpoint[1].push_back(j * largeur_carre_tuile); } if(tab_carte[i][j] == 3) { tab_coord_case_depart[0].push_back(i * largeur_carre_tuile); tab_coord_case_depart[1].push_back(j * largeur_carre_tuile); } } } for (unsigned int k = 0; k < tab_coord_case_bloquante[0].size(); k++) { for (unsigned int l = 0; l < tab_coord_case_bloquante[1].size(); l++) { cout << tab_coord_case_bloquante[k][l]; } cout << endl; } }
Ma seconde tri le premier tableau et rempli les trois autre.
Mon problème est surtout au niveau de l'utillisation des vecteurs. En effet j'ai des erreurs de segmentation pas toujours au meme endroit (vu au debugger), mais toujours pendant un resize ou bien un push_back.
Voila je sèche, je sèche.
voici le méssage.
Program received signal SIGSEGV, Segmentation fault.
At /usr/include/c++/4.3/bits/stl_vector.h:563
Program received signal SIGSEGV, Segmentation fault.
Merci à tous
Partager