Greffon quadtree pour gimp en C

Résolu
ephilas Messages postés 21 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 14 février 2007 - 12 févr. 2007 à 15:54
ephilas Messages postés 21 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 14 février 2007 - 14 févr. 2007 à 09:47
Bonjour,

je cherche à implémenter un plug-in pour gimp2.2 qui segmente une image grâce au quadtree.

Je m'inspire d'un code java que j'avais déjà fait et qui marchait mais la transposition en langage C me pose probleme.


Voilà ma structure en C dans "quadtree.h":


struct QuadtreeNode{

struct QuadtreeNode *_fils[4];

int _x,_y,_l,_h;

int _feuille;//1:le noeud est une feuille;  0:le noeud a 4 fils

};

 et voilà la méhode permettant d'instancier ce quadtree dans
"quadtree.c" (elle est incomplete, elle me sert à tester le
fonctionnement des structures) :


void quadtree_node(struct QuadtreeNode *quadtreeNode, int x, int y, int l, int h, int feuille){

quadtreeNode->_x = x;

quadtreeNode->_y = y;

quadtreeNode->_l = l;

quadtreeNode->_h = h;

quadtreeNode->_feuille = feuille;


if(!feuille){


///////////////////////////////////////////////////////////////////////////

// je suis obligé d'instancier le tableau de fils

// pour pouvoir m'en servir dans quadtree_node

// sinon j'ai une "erreur de segmentation"

///////////////////////////////////////////////////////////////////////////

    struct QuadtreeNode fils_1;

    struct QuadtreeNode fils_2;

    struct QuadtreeNode fils_3;

    struct QuadtreeNode fils_4;


    quadtreeNode->_fils[0] = &fils_1;

    quadtreeNode->_fils[1] = &fils_2;

    quadtreeNode->_fils[2] = &fils_3;

    quadtreeNode->_fils[3] = &fils_4;

/////////////////////////////////////////////////////////////////////////


    quadtree_node(quadtreeNode->_fils[0], 5, 5, 10, 10, 1);

    quadtree_node(quadtreeNode->_fils[1], 10, 5, 10, 10, 1);

    quadtree_node(quadtreeNode->_fils[2], 45, 5, 10, 10, 1);

    quadtree_node(quadtreeNode->_fils[3], 20, 30, 10, 10, 1);


    }

}


et enfin voilà le "main.c" :


struct QuadtreeNode *quadtreeNode;

quadtree_node(quadtreeNode, 10, 10, 50, 50, 0);

// Je vais donc créer un noeud "quadtreeNode"

// et ses 4 fils puisque ce denier n'est pas une feuille


Et voilà mon probleme : lorsque j'affiche les fils à partir de la méthode quadtree_node, le résultat est bon :


x:5 y:5 l:10 h:10 feuille:1

x:10 y:5 l:10 h:10 feuille:1

x:45 y:5 l:10 h:10 feuille:1

x:20 y:30 l:10 h:10 feuille:1


MAIS lorsque j'affiche les fils dans le "main.c", voilà ce que j'ai :


x:10 y:1081323328 l:1081294528 h:-1073744664 feuille:1080482768

x:1081294528 y:-1073744716 l:1080513717 h:1081294528 feuille:1085218816

x:1081294528 y:1085218816 l:1 h:10 feuille:1081323328

x:130719474 y:1081323328 l:1080516335 h:1 feuille:1085218816


Quel est le probleme ? Pourquoi certaines valeurs sont instanciées et d'autres pas ?


Merci d'avance !!!

2 réponses

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
13 févr. 2007 à 09:43
salut

tu crées un pointeur
struct QuadtreeNode *quadtreeNode;
et après tu accèdes à quadtreeNode->_x dans la fonction quadtree_Node
mais tu n'as pas alloué de mémoire au pointeur quadtreeNode
ça mériterait un seg fault je suis étonné que tu n'en aies pas !

et aussi tu fais struct QuadtreeNode fils_1;
toujours dans la fonction quadtree_Node :
c'est une variable temporaire, sa mémoire est libérée à la fin de la fonction
il lui allouer de la mémoire avec malloc:

quadtreeNode->_fils[0] = malloc(sizoef *quadtreeNode->_fils[0]);

a+
3
ephilas Messages postés 21 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 14 février 2007 1
14 févr. 2007 à 09:47
Merci acx01b !

Je ne suis pas tres familier avec les pointeurs et les allocations de memoire.


allez j'y retourne !
0
Rejoignez-nous