Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1452 connectés 

  FORUM HardWare.fr
  Programmation
  C

  histoires de malloc et de structures

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

histoires de malloc et de structures

n°1037662
guanglier
Posté le 06-04-2005 à 16:09:28  profilanswer
 

bonjour
j'essaie de faire marcher un truc , en fait je dois allouer dynamiquement un gros tableau qui se trouve dans une structure, mais le truc plante lorsque je libere la memoire
a terme il faut que je passe un pointeur vers la structure a une fonction pour qu'elle traite les donn'es  du tableau
voila  le principal sous visual :  
 
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
 
 
typedef struct IMAGE {
 
 unsigned char  **val; //val[x][y]
 
} image;
 
 
 
 
int main()
{
 
 
 image  im;    
 int   x=0,
    n=5000;
 
 
   
 if ((im.val = (unsigned char**) malloc (sizeof(unsigned char) * n)) == NULL)  
  printf ("\nechec !\n" );  
 
 
 
 for (x = 0 ; x < n ; x = x + 1)
 {  
 
  if ((im.val[x] = (unsigned char*) malloc (n * sizeof(unsigned char))) == NULL)      
   printf ("ERREUR allocation" );
     
   
 }
 printf ("allocation : x=%i\r", x);
 printf ("\n destruction..." );
 
 
 for (x=0 ; x<n; x=x+1){
 
    printf ("f  %i\r", x);
   free (im.val[x]);
 
 }
         free (im.val);
 
}
donc voila si quelqu'un a une idée pour faire fonctionner tout ça, mercii !!

mood
Publicité
Posté le 06-04-2005 à 16:09:28  profilanswer
 

n°1037670
Emmanuel D​elahaye
C is a sharp tool
Posté le 06-04-2005 à 16:11:32  profilanswer
 

guanglier a écrit :


#include <iostream.h>


Pas du C (et du mauvais C++...)
 
Plutôt que de mettre des cast aussi compliqués qu'inutiles, il vaut mieux utiliser des méthodes simples et fiables :
 
http://mapage.noos.fr/emdel/notes.htm#malloc


#include <stdio.h>
#include <stdlib.h>
 
typedef struct IMAGE
{
   unsigned char **val;         //val[x][y]
}
image;
 
int main (void)
{
   image im;
 
#if 1
   size_t n = 5000;
#else
   size_t n = 5;
#endif
   /* creer le tableau de pointeur */
   im.val = malloc (sizeof *im.val * n);
 
   if (im.val != NULL)
   {
      {
         size_t x;
 
         for (x = 0; x < n; x = x + 1)
         {
            im.val[x] = malloc (n * sizeof *im.val[x]);
 
            if (im.val[x] == NULL)
            {
               printf ("ERREUR allocation\n" );
               break;
            }
 
            printf ("allocation : x=%i\r", x);
            fflush (stdout);
         }
      }
      printf ("\n" );
 
      {
         size_t x;
         for (x = 0; x < n; x = x + 1)
         {
 
            printf ("destruction : x=%i\r", x);
            fflush (stdout);
            free (im.val[x]);
 
         }
      }
      free (im.val);
   }
   else
   {
      printf ("Memory error\n" );
   }
   printf ("\n" );
   return 0;
}


Pousse des cris si tu ne comprends pas...


Message édité par Emmanuel Delahaye le 06-04-2005 à 16:28:21

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1037680
guanglier
Posté le 06-04-2005 à 16:14:57  profilanswer
 

en effet, jle met tjrs mais il ne sert pas la ....
des restes du c++
 
mais bon tu vois pkoi ça marche po , enfin pkoi ça plante ? car je trouve ça bon les def du tableau et le free !

n°1037708
matafan
Posté le 06-04-2005 à 16:27:17  profilanswer
 

Ton premier malloc n'est pas assez grand... Tu alloues un tableau d'(unsigned char) alors qu'il te faut un tableau d'(unsigned char *).

n°1037711
fra0
Posté le 06-04-2005 à 16:28:13  profilanswer
 

c'est ton premier malloc, il devrait allouer des pointeurs et non des char.
 
ps : 40Ko c'est pas un gros tableau
 

n°1037712
fra0
Posté le 06-04-2005 à 16:28:33  profilanswer
 

oups grillé :)


Message édité par fra0 le 06-04-2005 à 16:32:53
n°1037721
guanglier
Posté le 06-04-2005 à 16:35:01  profilanswer
 

oula alors allons y par etape :  
-----------------
#if 1  
   size_t n = 5000;  
#else  
   size_t n = 5;  
#endif  
---------------
la je pousse un cri j'ai pas compris
 
 
matafan :  
if ((im.val = (unsigned char**) malloc (sizeof(unsigned char) * n)) == NULL)  
pour le premier malloc ct po bon ? ct po du tableau de char ?
 
 
fra0:
c'est ton premier malloc, il devrait allouer des pointeurs et non des char.
 
aaaaaaaaaaa je viens de comprendre ! ! ! !
lol quelle revelation ! !
merci tout le monde, je vais modifier mes trucs !  
sinon Emmanuel ya tjrs des trcus obscures pour moi dans ton code !
 
merci

n°1037733
Emmanuel D​elahaye
C is a sharp tool
Posté le 06-04-2005 à 16:45:24  profilanswer
 

guanglier a écrit :

oula alors allons y par etape :  
-----------------
#if 1  
   size_t n = 5000;  
#else  
   size_t n = 5;  
#endif  
---------------
la je pousse un cri j'ai pas compris


Avant de tester avec une matrice de 5000x5000, j'ai passé le code au détécteur de mensonge avec une matrice de 5x5, histoire de valider le principe...

Citation :

sinon Emmanuel ya tjrs des trcus obscures pour moi dans ton code !


Si te ne dis pas quoi, on va pas avancer..


Message édité par Emmanuel Delahaye le 06-04-2005 à 16:52:54

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1037739
guanglier
Posté le 06-04-2005 à 16:48:34  profilanswer
 

oué en fait c'etait juste pour ça ..
donc oui tu as change la taille pour voir ce que ça donne !
okayyy
 
sinon pour la "im.val[x] = malloc (n * sizeof *im.val[x]);"  
pas besoin de parentheses pour le sizeof donc , je note
 
 
fflush (stdout);  
j'y pensai pas mais oui il se pourrait que ce soit important !!
 
 
merci pour tout en tout cas!  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  histoires de malloc et de structures

 

Sujets relatifs
Listes chaînées SANS utiliser Mallocles classes, les structures, et les .h ???
Warning a cause de Structures et Float...strcmp entre 2 structures
question triviale sur utilisation de malloc[resolu]petit pb de structures...
[C/C++] Toujours les structures / Accès direct[C/C++] Lecture de structures en C++ ? Nouvelles questions >
[ansi] utilisation de types ou structures définis ailleurs ...[C] Structure & malloc
Plus de sujets relatifs à : histoires de malloc et de structures


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR