rem: categ = malloc ( sizeof ( struct struct_categ ));
add: categ = calloc ( 1, sizeof ( struct struct_categ ));
context: gboolean charge_categ_version_0_4_0 ( xmlDocPtr doc ){  xmlNodePtr node;  struct struct_categ *categ;		        categ = malloc ( sizeof ( struct struct_categ ));  /* on place node sur les generalites */  node = doc -> root -> childs;  while ( node )    {      if ( !strcmp ( node -> name,		     "Generalites" ) )	{	  xmlNodePtr node_generalites;	  /* node_generalites va faire le tour des generalites */	  node_generalites = node -> childs;	  while ( node_generalites )	    {	      /* rien pour l'instant, peut tre un jour ? */	      node_generalites = node_generalites -> next;	    }	}      /* on recupre ici les catg */      if ( !strcmp ( node -> name,		     "Details_des_categories" ))	{	  xmlNodePtr node_detail;	  xmlNodePtr node_sous_categ;	  node_detail = node -> childs;	  while ( node_detail )	    {	      GSList *liste_tmp;	      struct struct_categ *categorie;	      /* 	      on doit raliser une fusion, pour a, soit la catg existe, et on fait le */	      /* tour des sous catg en ajoutant celles qui n'existent pas, soit elle n'existe pas et on */	      /* ajoute la catg et ses sous categ */	      liste_tmp = g_slist_find_custom ( liste_struct_categories,						xmlGetProp ( node_detail,							     "Nom" ),						(GCompareFunc) recherche_categorie_par_nom );	      if ( liste_tmp )		{		  /* 		  la catgorie existe, on fait le tour des sous catgories */		  categorie = liste_tmp -> data;		  node_sous_categ = node_detail -> childs;		  while ( node_sous_categ )		    {		      struct struct_sous_categ *sous_categ;		      GSList *liste_tmp_2;		      /* on ne prend la sous catg que si elle n'existe pas */		      liste_tmp_2 = g_slist_find_custom ( categorie -> liste_sous_categ,							  xmlGetProp ( node_sous_categ,								       "Nom" ),							  (GCompareFunc) recherche_sous_categorie_par_nom );		      if ( !liste_tmp_2 )			{			  sous_categ = malloc ( sizeof ( struct struct_sous_categ ) );			  sous_categ -> no_sous_categ = ++categorie -> no_derniere_sous_categ;			  sous_categ -> nom_sous_categ = xmlGetProp ( node_sous_categ,								      "Nom" );			  categorie -> liste_sous_categ = g_slist_append ( categorie -> liste_sous_categ,									   sous_categ );			}		      node_sous_categ = node_sous_categ -> next;		    }		}	      else		{		  /* la catgorie n'existe pas, on l'ajoute */		      		  categorie = malloc ( sizeof ( struct struct_categ ) );		  categorie -> no_categ = ++no_derniere_categorie;		  nb_enregistrements_categories++;		  categorie -> nom_categ = xmlGetProp ( node_detail,							"Nom" );		  categorie -> type_categ = atoi ( xmlGetProp ( node_detail,								"Type" ));		  categorie -> no_derniere_sous_categ = atoi ( xmlGetProp ( node_detail,									    "No_derniere_sous_cagegorie" ));		  /*  pour chaque categorie, on recupre les sous-categories */		  categorie -> liste_sous_categ = NULL;		  node_sous_categ = node_detail -> childs;		  while ( node_sous_categ )		    {		      struct struct_sous_categ *sous_categ;		      sous_categ = malloc ( sizeof ( struct struct_sous_categ ) );		      sous_categ -> no_sous_categ = atoi ( xmlGetProp ( node_sous_categ,									"No" ));		      sous_categ -> nom_sous_categ = xmlGetProp ( node_sous_categ,								  "Nom" );		      categorie -> liste_sous_categ = g_slist_append ( categorie -> liste_sous_categ,								       sous_categ );		      node_sous_categ = node_sous_categ -> next;		    }		  liste_struct_categories = g_slist_append ( liste_struct_categories,							     categorie );		}	      node_detail = node_detail -> next;	    }	}      node = node -> next;    }  /* on libre la memoire */    xmlFreeDoc ( doc );  /* creation de la liste des categ pour le combofix */  creation_liste_categ_combofix ();  mise_a_jour_categ ();  remplit_arbre_categ ();  /* on rafraichit la liste des categ */   modification_fichier ( TRUE );  return ( TRUE );}