rem: sous_ib = malloc ( sizeof ( struct struct_sous_imputation ) );
add: sous_ib = calloc ( 1, sizeof ( struct struct_sous_imputation ) );
context: gboolean charge_ib_version_0_4_0 ( xmlDocPtr doc ){  xmlNodePtr node;  struct struct_imputation *ib;		        ib = malloc ( sizeof ( struct struct_imputation ));  /* 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 ib */      if ( !strcmp ( node -> name,		     "Details_des_ib" ))	{	  xmlNodePtr node_detail;	  xmlNodePtr node_sous_ib;	  node_detail = node -> childs;	  while ( node_detail )	    {	      GSList *liste_tmp;	      struct struct_imputation *ib;	      /* 	      on doit raliser une fusion, pour a, soit l'ib existe, et on fait le */	      /* tour des sous ib en ajoutant celles qui n'existent pas, soit elle n'existe pas et on */	      /* ajoute l'ib et ses sous ib */	      liste_tmp = g_slist_find_custom ( liste_struct_imputation,						xmlGetProp ( node_detail,							     "Nom" ),						(GCompareFunc) recherche_imputation_par_nom );	      if ( liste_tmp )		{		  /* 		  la catgorie existe, on fait le tour des sous catgories */		  ib = liste_tmp -> data;		  node_sous_ib = node_detail -> childs;		  while ( node_sous_ib )		    {		      struct struct_sous_imputation *sous_ib;		      GSList *liste_tmp_2;		      /* on ne prend la sous catg que si elle n'existe pas */		      liste_tmp_2 = g_slist_find_custom ( ib -> liste_sous_imputation,							  xmlGetProp ( node_sous_ib,								       "Nom" ),							  (GCompareFunc) recherche_sous_imputation_par_nom );		      if ( !liste_tmp_2 )			{			  sous_ib = malloc ( sizeof ( struct struct_sous_imputation ) );			  sous_ib -> no_sous_imputation = ++ib -> no_derniere_sous_imputation;			  sous_ib -> nom_sous_imputation = xmlGetProp ( node_sous_ib,									"Nom" );			  ib -> liste_sous_imputation = g_slist_append ( ib -> liste_sous_imputation,									     sous_ib );			}		      node_sous_ib = node_sous_ib -> next;		    }		}	      else		{		  /* l'ib n'existe pas, on l'ajoute */		      		  ib = malloc ( sizeof ( struct struct_imputation ) );		  ib -> no_imputation = ++no_derniere_imputation;		  nb_enregistrements_imputations++;		  ib -> nom_imputation = xmlGetProp ( node_detail,						      "Nom" );		  ib -> type_imputation = atoi ( xmlGetProp ( node_detail,							      "Type" ));		  ib -> no_derniere_sous_imputation = atoi ( xmlGetProp ( node_detail,								  "No_derniere_sous_imputation" ));		  /*  pour chaque ib, on recupre les sous-ib */		  ib -> liste_sous_imputation = NULL;		  node_sous_ib = node_detail -> childs;		  while ( node_sous_ib )		    {		      struct struct_sous_imputation *sous_ib;		      sous_ib = malloc ( sizeof ( struct struct_sous_imputation ) );		      sous_ib -> no_sous_imputation = atoi ( xmlGetProp ( node_sous_ib,									  "No" ));		      sous_ib -> nom_sous_imputation = xmlGetProp ( node_sous_ib,								    "Nom" );		      ib -> liste_sous_imputation = g_slist_append ( ib -> liste_sous_imputation,								     sous_ib );		      node_sous_ib = node_sous_ib -> next;		    }		  liste_struct_imputation = g_slist_append ( liste_struct_imputation,							  ib );		}	      node_detail = node_detail -> next;	    }	}      node = node -> next;    }  /* on libre la memoire */    xmlFreeDoc ( doc );  /* creation de la liste des ib pour le combofix */  creation_liste_imputation_combofix ();  mise_a_jour_imputation ();  remplit_arbre_imputation ();  modification_fichier ( TRUE );  return ( TRUE );}