Passage d'un tableau a 2 dim a une fonction [Résolu]

Signaler
Messages postés
19
Date d'inscription
jeudi 17 août 2006
Statut
Membre
Dernière intervention
4 février 2009
-
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
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

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
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
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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
Messages postés
19
Date d'inscription
jeudi 17 août 2006
Statut
Membre
Dernière intervention
4 février 2009

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.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
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
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Autant pour moi, je lisais le memset comme étant un malloc.... Le week end se fait attendre !

Shell