#1 Le 12/10/2009, à 00:43
- tshirtman
[résolu]passing argument 1 of ‘test’ from incompatible pointer
salut, j'ai un probleme en passant un tableau de booléens pour un petit programme que je dévelloppe, j'ai réduit le cas au minimum dans un programme séparé, tout me semble bon, mais il n'accepte pas...
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
int test( bool **mask, int w, int h){
int x, y;
for(x=0; x<w; x++){
for(y=0;y<h; y++)
printf("%d", mask[x][y]? 1:0);
printf("\n");
}
return EXIT_SUCCESS;
}
int main(int argc, char* argv[]){
bool mask[10][4];
int x, y;
for(x=0; x<10; x++){
for(y=0; y<4; y++)
mask[x][y] = (x+y)%3? true: false;
}
test(mask, 10,4);
return EXIT_SUCCESS;
}
gcc test.c -o test -Wall
test.c: In function ‘main’:
test.c:23: attention : passing argument 1 of ‘test’ from incompatible pointer type
et biensur j'ai une segfault... je passe pourtant bien un tableau de booléens à deux dimmentions non? je doit bien mettre bool ** ?
quelqu'un peut m'aider à y voir plus clair? pourtant j'avais l'impression de maitriser les pointeurs depuis le temps ^^".
Dernière modification par tshirtman (Le 13/10/2009, à 07:13)
Hors ligne
#2 Le 12/10/2009, à 05:32
- grim7reaper
Re : [résolu]passing argument 1 of ‘test’ from incompatible pointer
Salut,
Le passage de tableaux à 2 dimensions n'est pas si simple que ça. La règle est qu'il faut connaître la taille des N-1 dernières dimensions. Donc, pour un tableau à deux dimensions, c'est la deuxième dimension qui doit être connue, et la fonction doit être définie ainsi :
int test( bool mask[][4], int w, int h){
int x, y;
for(x=0; x<w; x++){
for(y=0;y<h; y++)
printf("%d", mask[x][y]? 1:0);
printf("\n");
}
return EXIT_SUCCESS;
}
En revanche, si la taille ne peut pas être connu à l'avance (genre tableau allouée dynamiquement) il faut passer le tableau en paramètre, ainsi que son nombre de ligne et de colonne en paramètres.
Par contre, l'accès aux éléments ne se feras plus avec "tab[i][j]" mais avec "tab[i * nb_colonne + j]". La fonction deviendras donc :
int test_v2(bool *mask, int nb_ligne, int nb_colonne){
int x, y;
puts("");
for(x=0; x<nb_ligne; x++){
for(y=0;y<nb_colonne; y++)
printf("%d", mask[x * nb_colonne + y]? 1:0);
printf("\n");
}
return EXIT_SUCCESS;
}
Hors ligne
#3 Le 12/10/2009, à 08:21
- tshirtman
Re : [résolu]passing argument 1 of ‘test’ from incompatible pointer
Ah oui c'est vrai il peut pas adresser sans connaitre la largeur vu qu'en mémoire les lignes sont les unes à la suite des autres, et il ne sait pas que c'est "w"... logique....
merci je vais arranger ça
Hors ligne