Problème de segmentation fault
Bonjour à tous,
je viens vous voir parce que je sèche la.
voici le code et les explications apres.
Code:
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;
}
} |
Code:
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 première fonction rempli un tableau avec les éléments d'un fichier.
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