Probleme Erreur Segmentation

kyubi6363 Messages postés 2 Date d'inscription dimanche 19 juin 2005 Statut Membre Dernière intervention 22 mai 2010 - 22 mai 2010 à 02:06
kyubi6363 Messages postés 2 Date d'inscription dimanche 19 juin 2005 Statut Membre Dernière intervention 22 mai 2010 - 22 mai 2010 à 16:31
Voila sa compile bien mais erreur de segmentation quand je lance. Pouvais vous me dire ce qu'il ne va pas :)

#include <stdlib.h>
#include <stdio.h>

#define TAILLE_LARGEUR 40
#define TAILLE_LONGUEUR 100
#define MAP_VIDE 0

void generationMap(int*** mappy);
void afficheMap(int** mappy);

int main(){

int *map;
map=malloc((TAILLE_LARGEUR*TAILLE_LONGUEUR) * sizeof(int));

generationMap(&map);
afficheMap(map);

free(map);
return 0;
}

void generationMap(int*** mappy){
int i,j;

for(i=0; i<TAILLE_LONGUEUR; i++)
for(j=0; j<TAILLE_LARGEUR; j++)
mappy[i][j]=MAP_VIDE;
}

void afficheMap(int** mappy){
int i,j;

for(i=0; i<TAILLE_LONGUEUR; i++){
printf("|");
for(j=0; j<TAILLE_LARGEUR; j++)
printf("%d",mappy[i][j]);
printf("|\n");
}
}

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
22 mai 2010 à 14:15
Ça m'étonne que tu arrives à compiler sans avoir des warnings (ou alors tu ne les a pas activé).
Tu essaies de faire passer de pointeurs dans des fonctions dont les arguments ne sont pas compatibles. Le laxisme du C te permet de compiler, mais ce que tu as fait est faux.

Un tableau à double dimension est de type **. Donc tu ne peux pas le passer dans un *** (car &map donnera ** et non ***).
De plus, lorsque tu initialises ton tableau à double dimension, il faut faire un malloc pour la première dimension, et autant de malloc pour la deuxième. Ce qui fera un malloc + TAILLE_LARGEUR malloc.
Faire un seul malloc ne suffit pas.

Enfin, si tu fais un ***, alors dans ta fonction pour attribuer quelque chose, il te faut faire: (*mappy)[i][j] = MAP_VIDE;


2 solutions:
- Tu fais un vrai tableau à double dimensions
- Tu fais un tableau à simple dimension et tu accès aux élément en faisant: tab[i + j* largeur] au lieu de tab[i][j].

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
kyubi6363 Messages postés 2 Date d'inscription dimanche 19 juin 2005 Statut Membre Dernière intervention 22 mai 2010
22 mai 2010 à 16:31
Ok merci ;)
0
Rejoignez-nous