Probleme allocation dynamique

totoscill Messages postés 48 Date d'inscription jeudi 26 avril 2007 Statut Membre Dernière intervention 10 décembre 2009 - 27 févr. 2008 à 11:01
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 1 mars 2008 à 15:50
Bonjour,

Je veux allouer de la mémoire dynamiquement pour 4 tableaux à 2 dimensions mais lors de l'éxécution, le test m'informe que l'allocation est impossible. Je programme sous labwindows CVI 8.5. Voici le code:

TabTimePalAlim=(int**) calloc(5,sizeof(int*));
  for(i=0; i<NbAlim; i++)
   TabTimePalAlim[i]=(int*) calloc(5,sizeof(int)); 
    
  if(TabTimePalAlim[i]==NULL)
   {
   MessagePopup("Erreur!!!", "Erreur lors de l'allocation de mémoire!");
   
   for(i=0; i<5; i++)
    {
    free(TabTimePalAlim[i]);
    TabTimePalAlim[i]=NULL;
    }
   free(TabTimePalAlim);
   TabTimePalAlim=NULL;
   }
    
  TabValPalAlim=(double**) calloc(5,sizeof(double*));
  for(i=0; i<NbAlim; i++)
   TabValPalAlim[i]=(double*) calloc(5,sizeof(double));
   
  if(TabValPalAlim[i]==NULL)
   {
   MessagePopup("Erreur!!!", "Erreur lors de l'allocation de mémoire!");
   
   for(i=0; i<5; i++)
    {
    free(TabValPalAlim[i]);
    TabValPalAlim[i]=NULL;
    }
   free(TabValPalAlim);
   TabValPalAlim=NULL;
   }
    
 
  TabTimePalCh=(int**) calloc(5,sizeof(int*));
  for(i=0; i<NbCharge; i++)
   TabTimePalCh[i]=(int*) calloc(5,sizeof(int));
   
  if(TabTimePalCh[i]==NULL)
   {
   MessagePopup("Erreur!!!", "Erreur lors de l'allocation de mémoire!");
   
   for(i=0; i<5; i++)
    {
    free(TabTimePalCh[i]);
    TabTimePalCh[i]=NULL;
    }
   free(TabTimePalCh);
   TabTimePalCh=NULL;
   }
    
  TabValPalCh=(double**) calloc(5,sizeof(double*));
  for(i=0; i<NbCharge; i++)
   TabValPalCh[i]=(double*) calloc(5,sizeof(double));
    
  if(TabValPalCh[i]==NULL)
   {
   MessagePopup("Erreur!!!", "Erreur lors de l'allocation de mémoire!");
   
   for(i=0; i<5; i++)
    {
    free(TabValPalCh[i]);
    TabValPalCh[i]=NULL;
    }
   free(TabValPalCh);
   TabValPalCh=NULL;
   }

A chaque démarrage, le problème reviend. J'ai essayer avec la fonction malloc et l'allocation se fait correctement mais lors de la réallocation de mémoire (realloc) les problèmes reviennes (run time error:Attempt to realloc pointer to freed memory
 ).
voici la réallocation pour infos:


TabTimePalAlim=realloc(TabTimePalAlim, NbAlim*sizeof(int*));
     TabTimePalAlim=realloc(TabTimePalAlim, NbPal*sizeof(int));
    
     if(TabTimePalAlim == NULL)
     {
     for(i=0; i<NbPal; i++)
      {
      free(TabTimePalAlim[i]);
      TabTimePalAlim[i]=NULL;
      }
     free(TabTimePalAlim);
     TabTimePalAlim=NULL;
     }
    
   
     TabValPalAlim=realloc(TabValPalAlim, NbAlim*sizeof(double*));
     TabValPalAlim=realloc(TabValPalAlim, NbPal*sizeof(double));
    
     if(TabValPalAlim == NULL)
     {
     for(i=0; i<NbPal; i++)
      {
      free(TabValPalAlim[i]);
      TabValPalAlim[i]=NULL;
      }
     free(TabValPalAlim);
     TabValPalAlim=NULL;
     }
    
     TabValPalCh=realloc(TabValPalCh, NbAlim*sizeof(double*));
     TabValPalCh=realloc(TabValPalCh, NbPal*sizeof(double));
         
     if(TabValPalCh == NULL)
     {
     for(i=0; i<NbPal; i++)
      {
      free(TabValPalCh[i]);
      TabValPalCh[i]=NULL;
      }
     free(TabValPalCh);
     TabValPalCh=NULL;
     }
    
     TabTimePalAlim=realloc(TabTimePalCh, NbAlim*sizeof(int*));
     TabTimePalAlim=realloc(TabTimePalCh, NbPal*sizeof(int));
    
     if(TabTimePalCh == NULL)
     {
     for(i=0; i<NbPal; i++)
      {
      free(TabTimePalCh[i]);
      TabTimePalCh[i]=NULL;
      }
     free(TabTimePalCh);
     TabTimePalCh=NULL;
     }




Pourriez vous me dire quel est le problème?

Je vous remercie.

1 réponse

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
1 mars 2008 à 15:50
TabTimePalAlim=(int**) calloc(5,sizeof(int*));
  for(i=0; i<NbAlim; i++)
   TabTimePalAlim[i]=(int*) calloc(5,sizeof(int)); 

tu es sur(e) du premier 5 ?? ca serait pas par hasard calloc(NbAlim,sizeof(int*)) ???

Pourquoi faire simple quand on peut faire compliqué ?
0
Rejoignez-nous