IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

A propos de réallocation mémoire


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut A propos de réallocation mémoire
    Salut a tous,
    J'ai discuté avec quelqu'un à propos de ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void func(void* mem,int taille)
    {
    if ( (mem= (void*) realloc(mem,taille+10)) ==NULL)
    {printf("Erreur de réallocation\n");}
    }
    Il paraitrait que celui ci possède "une erreur de conception" à cet endroit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (mem= (void*) realloc(mem,taille+10)) ==NULL)
    car cela empecherait la fonction appelante de libérer la mémoire.

    Le code appropriée me dit-on serait le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void func(void* mem,int taille)
    {
    void* temp;
    if ( (temp= (void*) realloc(mem,taille+10)) ==NULL)
    {printf("Erreur de réallocation\n");}
    else
    {mem=temp;}
    }
    Alors quel est la vérité sur le sujet ?
    Merci d'avance a ceux qui fourniront un avis!
    TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS

  2. #2
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    A mon avis, en cas d'erreur, alors oui il peut y avoir un probleme de libération de la mémoire pour la fonciton appelante. En effet, la zone mémoire allouée aura été modifiée, et la séquence non terminée. Si tu utilises un tmp, alors la mémoire pointée par mem n'aura pas été modifiée, et donc restera libérable malgré l'erreur.

    Par contre si tout se passe bien, a mon avis il n'y aura pas de problème.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par barthelv
    A mon avis, en cas d'erreur, alors oui il peut y avoir un probleme de libération de la mémoire pour la fonciton appelante. En effet, la zone mémoire allouée aura été modifiée, et la séquence non terminée. Si tu utilises un tmp, alors la mémoire pointée par mem n'aura pas été modifiée, et donc restera libérable malgré l'erreur.

    Par contre si tout se passe bien, a mon avis il n'y aura pas de problème.
    Ton message m'a fait prendre conscience de la réponse au problème!!Auto-Réponse:
    Lorsqu'il se produit une erreur mem prend la valeur de NULL mais l'espace alloué précedemment n'a pas été libéré, il n'est plus possible d' accéder à la zone mémoire (puisque mem a pour valeur NULL) et puisque plus aucune variable ne pointe sur celle ci il n'y a aucun moyen de la libérer (d'ou l'interet du pointeur temp).
    Merci pour ta remarque qui m'a "ouvert l'esprit" !!
    A bientot
    TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/11/2009, 13h33
  2. Problème de réallocation de la mémoire
    Par dot-_-net dans le forum C++
    Réponses: 16
    Dernier message: 18/05/2008, 23h18
  3. Réallocation de mémoire
    Par totoscill dans le forum Débuter
    Réponses: 5
    Dernier message: 20/03/2008, 12h18
  4. Réponses: 14
    Dernier message: 07/06/2007, 19h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo