Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

Hors ligne