× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 realloc : fiable ou pas?Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
don diego
  Posté le 21/12/2006 @ 17:30 
Aller en bas de la page 
Petit astucien

Bonjour,

j'utilise realloc dans un programme C.

mais j'ai l'impression que de temps en temps, il ne m'alloue pas correctement mon tableau. Et j'ai donc des erreurs après.

Je voudrais donc savoir si realloc marche bien ou pas? En sachant que je fais beaucoup de fois realloc dans mon programme.

Publicité
breizhbugs
 Posté le 21/12/2006 à 18:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Qu'est ce qui te fait croire que ca ne marche pas?

Comment l'utilises-tu? (bout de code?)

don diego
 Posté le 21/12/2006 à 18:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

En fait, je me suis posé cette question car quelqu'un sur un forum a dit que ça ne marchait pas tout le temps.

int **matrice;

....

matrice[i] = (int*) realloc(matrice[i],sizeof(int)+(nombre_etat+1));

matrice[i][nombre_etat] = 0;

breizhbugs
 Posté le 21/12/2006 à 18:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
don diego a écrit :

En fait, je me suis posé cette question car quelqu'un sur un forum a dit que ça ne marchait pas tout le temps.

int **matrice;

....

matrice[i] = (int*) realloc(matrice[i],sizeof(int)+(nombre_etat+1));

matrice[i][nombre_etat] = 0;


Heu ben en fait, ca depend de ce qu'il y a dans le "..."!

AlexPrince
 Posté le 21/12/2006 à 18:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Je ne connais pas vraiment l'allocation dynamique de mémoire en C, mais il me semble logique qu'avant de faire un REalloc, tu dois au moins avoir fait un malloc auparavant. Pour ce qui est de realloc qui ne marche pas tout le temps, ça me semble un peu bizarre. Un ordinateur ne peut pas se tromper... Si ça ne marche pas tout le temps, c'est la faute du programmeur, pas de la fonction.

Modifié par AlexPrince le 21/12/2006 18:58
koala01
 Posté le 22/12/2006 à 12:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut,

Les fonctions d'allocation dynamique (malloc, et realloc) ne sont fiables... que dans la mesure où elles disposent de suffisemment d'espace mémoire contigue pour arriver à allouer l'espace demandé.

Les deux différences notoires sont que:

  • malloc renvoie NULL en cas d'échec, alors que realloc renvoie simplement le pointeur (de pointeur) tel qu'il était avant la tentative
  • malloc se contente d'allouer l'espace mémoire, alors que realloc recopie le contenu de l'espace memoire "d'origine" dans l'espace memoire "de destination" à concurence de max (taille la plus petite)

Ceci dit, voici quelques remarque en vrac:

  • Quand tu (ré) alloue de la mémoire, tu dois multiplier la taille du type que tu utilises par le nombre d'éléments que tu souhaites, et non l'additionner (un int fait, classiquement, et meme si cela peut changer, 32 bits... si tu veux trois entiers, il faut allouer sizeof(int)*3 et non sizeof(int)+3 (différence entre 32*3=96bits à 32+3=35 bits )
  • Le cast explicite (matrice[i]=(int) realloc(matrice[i],sizeof(int)*(nombre_etat+1));) est tout à fait inutile (matrice[i]=realloc(matrice[i],sizeof(int)*(nombre_etat+1)) fonctionne tres bien... meme si tu utilises autre chose qu'un int )
  • Tu ne peux envisager de (re) allouer de l'espace mémoire à un élément dans un tableau de pointeurs, que si tu as correctement alloué la mémoire au ... tableau de pointeurs lui-même (comme tu coupe ton code, on ne peut pas vérifier que tu aies bien fait un matrice=malloc(sizeof(int*)*(...)))
  • N'oublie pas que, si tu a alloué la mémoire de manière dynamique à un tableau de pointeur, et que tu as alloué de la mémoire à chacun des éléments du tableau, il faudra commencer par libérer la mémoire allouée aux éléments du tableau avant de libérer la mémoire du tableau lui-meme


Modifié par koala01 le 22/12/2006 12:46
don diego
 Posté le 24/12/2006 à 18:44 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut,

effectivement, realloc est fiable.

C'est parce que j'avais mis un "+" ou lieu d'un "*".

Bravo Koala01 d'avoir trouvé l'erreur.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
144,80 €Mini PC Acute Angle AA-B4 (Celeron N3450, 8Go RAM, 64Go+SSD 128Go) à 144,80 € avec le code GBCNSJXPC
Valable jusqu'au 11 Juillet

Gearbest fait une promotion sur l'ordinateur Acute Angle AA - B4 qui passe à 144,80 € au lieu de 180 € grâce au code promo GBCNSJXPC. Ce mini PC au design atypique et au corps en bois, intègre un processeur Intel Celeron N3450 (4 coeurs de 1,1 à 2,2 GHz), 8 Go de RAM, un espace de stockage de 64 Go EMMC ainsi qu'un SSD de 128 Go. Il possède également le WiFi5, le Bluetooth 5.0, une prise Ethernet Gigabit, 3 ports USB 3.0, une sortie HDMI. L'ordinateur est livré avec une prise électrique européenne. Il est accompagné de Windows 10 Familial. Avec ce PC, vous pourrez réaliser sans soucis toutes vos tâches courantes : internet, bureautique, multimédia.

Ce marchand sérieux se trouvant en Chine, la livraison peut prendre une quinzaine de jours. Comptez une dizaine d'euros pour la livraison en France et l'assurance pour le transport. Vous pouvez payer par carte bancaire ou par Paypal (conseillé pour bénéficier de la garantie Paypal).


> Voir l'offre
77,98 €Souris sans fil avec trackball Logitech MX Ergo à 77,98 €
Valable jusqu'au 10 Juillet

Amazon fait une belle promotion sur la souris sans fil avec trackball Logitech MX Ergo qui passe à 77,98 € livrée gratuitement. On la trouve ailleurs autour de 100 €. Réduisant de 20% la contrainte musculaire par rapport à une souris standard,  le Logitech MX Ergo vous facilitera le travail en maintenant dans une position très stable votre main.


> Voir l'offre
47,99 €Kit de démarrage Philips Hue White E27 (3 ampoules LED + pont) à 47,99 €
Valable jusqu'au 12 Juillet

Amazon fait une belle promotion sur le kit de démarrage Philips Hue White qui passe à 47,99 € livré gratuitement au lieu de 89 €.  Ce kit de démarrage comporte 3 ampoules LED connectée (culot E27) et un pont de connexion Hue. Avec ce kit, vous pourrez contrôler et programmer l'éclairage des lampes avec votre smartphone sous Android ou iOS (compatible avec le HomeKit d'Apple). 


> Voir l'offre

Sujets relatifs
malloc, realloc
 > Tous les forums > Forum Autres langages