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 :

Realloc et Malloc


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Malikemal
    Invité(e)
    Par défaut Realloc et Malloc
    Bonjour à tous,

    Ça fait maintenant 1h30 que j'étudie ce problème sous toutes ces coutures, et ben j'en voie aucune qui dépasse ... Le problème vient de deux allocations dynamiques, un avec malloc et un avec realloc. J'ai pris un code minimaliste avec le problème ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main ()
    {
        int *tabb = malloc(sizeof(int) * 20);
        printf("%d %d", sizeof (tabb), sizeof(int));
        tabb = realloc(tabb, 2 * sizeof tabb);
        printf("\n%zu\n", sizeof tabb);
        free(tabb);
        return 0;
    }
    Et voici ce que m'affiche la console

    4 4
    4
    Pourquoi le malloc et le realloc ne fonctionnent-ils pas ? Je n'ai aucune erreur du compilateur ....

    Merci par avance,

    Cordialement,

  2. #2
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Ca marche très bien sauf que sizeof(tabb) tu renvoies la taille d'un int*

  3. #3
    Malikemal
    Invité(e)
    Par défaut
    Merci !

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        tabb = realloc(tabb, 2 * sizeof tabb);
    Attention à ce genre de chose. Si realloc échoue, tu provoques une fuite de mémoire.

  5. #5
    Malikemal
    Invité(e)
    Par défaut
    Merci de me prévenir mais je le fait Ce que j'ai montré est un code minimaliste c'est pour ça que la gestion des erreurs n'y est pas !

    Cordialement,

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Malikemal Voir le message
    Citation Envoyé par jeroman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        tabb = realloc(tabb, 2 * sizeof tabb);
    Attention à ce genre de chose. Si realloc échoue, tu provoques une fuite de mémoire.
    Merci de me prévenir mais je le fait Ce que j'ai montré est un code minimaliste c'est pour ça que la gestion des erreurs n'y est pas !

    Cordialement,
    Oui mais je présume que tu voulais faire des tests en réallouant 2 fois la taille initiale.
    Or 2*sizeof(tabb) n'est pas 2 fois la taille initiale mais 2 fois la taille d'un int*

    Le trop est l'ennemi du bien. Tu as voulu trop bien faire. Tu as alloué au départ 20 * sizeof(int), tu aurais dû écrire ensuite realloc(..., 40 * sizeof(int))
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. malloc calloc realloc free
    Par lia20 dans le forum C
    Réponses: 7
    Dernier message: 26/05/2007, 15h22
  2. Réponses: 6
    Dernier message: 15/12/2006, 13h55
  3. Comportement de malloc/realloc
    Par gege2061 dans le forum C
    Réponses: 5
    Dernier message: 08/12/2005, 15h09
  4. Malloc et realloc
    Par Triomen dans le forum C
    Réponses: 6
    Dernier message: 21/02/2005, 19h20
  5. Réponses: 4
    Dernier message: 03/12/2002, 16h47

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