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 :

[allocation dynamique] Realloc malloc et dimensions.


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 9
    Points : 8
    Points
    8
    Par défaut [allocation dynamique] Realloc malloc et dimensions.
    Salut,

    2 questions :

    1) Comment on realloue un vecteur (genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vecteur = (int*) malloc(N*sizeof(int));
    ???vecteur = (int*) realloc((int)(N/2)*sizeof(int));  ???
    2) Y a t il une fonction qui permet de connaitre la taille d'un vecteur alloué dynamiquement(dans les librairies standards)

    Merci very much!

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut Re: [allocation dynamique] Realloc malloc et dimensions.
    Citation Envoyé par semheis
    1) Comment on realloue un vecteur (genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vecteur = (int*) malloc(N*sizeof(int));
    ???vecteur = (int*) realloc((int)(N/2)*sizeof(int));  ???
    Tout a fait !, cf man realloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void *realloc(void *ptr, size_t size);
    Attention,il faut voir si il a marche (!= NULL)!

    2) Y a t il une fonction qui permet de connaitre la taille d'un vecteur alloué dynamiquement(dans les librairies standards)
    ?? C'est a dire ? Savoir si la taille de ce que tu as alloue ? si tu ne t'en souviens plus ?
    Donne un exemple...

  3. #3
    Membre averti

    Inscrit en
    Juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int* vecteur;
    vecteur = (int*) malloc(N*sizeof(int));
    vecteur = (int*) realloc(vecteur, (N/2)*sizeof(int));
    2)Non, pas en standard en tout cas.

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 57
    Points
    57
    Par défaut Connaitre la taille alloué dynamiquement !!!!
    Le seule moyen que je connaisse pour connaitre la taille alloué dynamiquement est d'aller lire dans la memoire quelques octets avant ton pointeur.
    Les fonction malloc et calloc te renvois un pointeur sur une zone alloué, mais pour pouvoir liberer cette zone, des informations sont stocké juste avant ton pointeur. Dans ces informations, tu trouves la taille complete alloué (celle que tu peut utiliser + celle qui est utiliser pour ranger ces informations).
    Donc si tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char* pt;
    pt=(char*) malloc(sizeof(char)*100);
    printf("%d",*(pt-2));  /* -1 , -2 ou -4 cela depend de la machine */
    tu vas obtenir une taille qui sera legerement suppérieur à la taille que tu peut utiliser.

    ATTENTION l'espace alloué est toujours >= a celui que tu as demandé donc si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pt=(char*)malloc(sizeof(char)*1);
    il est fort possible que la taille alloué soit beaucoup plus grande que la taille d'un char.

    Cette méthode n'est pas trés propre et surtout n'est pas du tout portable alors attention

  5. #5
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    Il y a un grand principe qui régit l'allocation dynamique de la mémoire : si tu ne sait pas ce que tu as alloué alors ton appli a un problème. Autrement dit, il faut bétonner ton code pour être sûr de savoir ce que tu fais et ce que tu as fait a chaque instant !

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/06/2008, 18h05
  2. Réponses: 9
    Dernier message: 12/06/2007, 14h15
  3. Réponses: 13
    Dernier message: 01/10/2006, 00h25
  4. Pb d'allocation dynamique avec malloc
    Par Magicmax dans le forum C
    Réponses: 5
    Dernier message: 12/12/2005, 01h04
  5. Réponses: 6
    Dernier message: 26/11/2005, 19h55

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