Passage d'un tableau a 2 dim a une fonction

Résolu
AsM0DeUz Messages postés 19 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 4 février 2009 - 20 mars 2008 à 14:15
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 20 mars 2008 à 16:02
Bonjour,




Quand je compile le code ci-dessous j'ai ce message d'erreur :



gcc -ansi -Wall -o fow fow.c


fow.c: In function ‘main’:


fow.c:28: warning: passing argument 1 of ‘dispmap’ from incompatible pointer type


et j'ai un segmentation fault a l'execution. L'appel a la fonction semble mauvais mais pq ?



Merci





    

1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4
  5 #define MATMAXX 10
  6 #define MATMAXY 10
  7
  8 void dispmap(int **, int, int);   
  9
 10 typedef struct dot
 11 {
 12         int coordX;
 13         int coordY;
 14 } dot;
 15
 16 typedef struct wall
 17 {
 18         dot begin;
 19         dot end;
 20 } wall;
 21
 22
 23 int main(int argc, char *argv[])
 24 {
 25         int map[MATMAXX][MATMAXY];
 26        
 27         test=map;
 28         memset(*map, 0, sizeof(map));
 29         dispmap(map, MATMAXX, MATMAXY);
 30 
 31         return 0;
 32 }
 33
 34 void dispmap(int **toDisplay, int x, int y)
 35 {
 36         int i,j;
 37        
 38         for(i=0;i<x;i++)
 39                 for(j=0;j<y;j++)
 40                 {
 41                         printf("%c", toDisplay[i][j]);
 42                 }
 43         return;
 44 }

5 réponses

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
20 mars 2008 à 14:39
Bonjour,

Il y a eut un post sur le même sujet hier :
Sujet : [C] incompatibilité dans une fonction [ Divers / Divers ] (The_KniGhT_972)
Ce qui donne cette solution possible :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MATMAXX 10
#define MATMAXY 10

void dispmap(int*,int,int);

typedef struct dot
{
   int coordX;
   int coordY;
} dot;

typedef struct wall
{
   dot begin;
   dot end;
} wall;

int main(int argc, char *argv[])
{
   int map[MATMAXX][MATMAXY];
   memset(map,0,sizeof(map));
   dispmap((int*)map,MATMAXX,MATMAXY);
   return 0;
}

void dispmap(int *toDisplay,int x,int y)
{
   int i,j;
   for(i=0 ; i<x ; i++)
   {
      for(j=0 ; j<y ; j++) printf("%d ",toDisplay[i * y + j]);
      printf("\n");
   }
}

Jean-François
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
20 mars 2008 à 14:37
Salut,
Deux remarques :
1) test=map ? tu utilises une variable non référencé et qui en plus ert a rien!
2) Qu'est ce que un memset fait ici ?! Tu as défini ton tableau avec des tailles fixes, tu ne doit en aucun cas y faire une alloc!

Shell
0
AsM0DeUz Messages postés 19 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 4 février 2009
20 mars 2008 à 14:52
Deux remarques :
1) test=map ? tu utilises une variable non référencé et qui en plus ert a rien!

Euhhh c'est un oubli, il n'a pas de raison d'etre

2) Qu'est ce que un memset fait ici ?! Tu as défini ton tableau avec des tailles fixes, tu ne doit en aucun cas y faire une alloc!

Je ne fais pas d'allocation, j'initialise tout le tableau a 0. Les valeurs d'un tableau est 0 par defaut mais c'est pour plus tard definir a une autre valeur.
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
20 mars 2008 à 14:52
Salut

Deathcrach>>memset ne fait en aucun cas une allocation mais juste une initialisation de la memoire a une certaine valeur.

A+
Mon site internet : http://pistol.petesampras.free.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
20 mars 2008 à 16:02
Autant pour moi, je lisais le memset comme étant un malloc.... Le week end se fait attendre !

Shell
0
Rejoignez-nous