Allocation Dynamique
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Allocation Dynamique



  1. #1
    andromedae

    Allocation Dynamique


    ------

    salut tt le monde je trouve une difficulté a comprendre un exemple du cours sur l'allocation dynamique des tableaux

    le voici :

    Code:
    void fonctionAllocation(int **ptr , int nombreElements){
          *ptr = malloc( nombreElements * sizeof(**ptr) );
    }
     
    int main(void){
          int * ptr;
          fonctionAllocation(&ptr , 10);
          if(ptr == NULL)
               //........
          //.......
          return 0;
    }
    }
    l'objectif c allouer de la mémoire, sans utiliser le retour d'une fonction mais à l'aide d'un passage par référence . le probleme je n'est pas compris pk on a utiliser un double pointeur (int **) dans le cours on dit car si on utilise un simple pointeur int* on serait entrain de faire un passage par valeur, et donc notre pointeur dans la fonction ne sera qu'une variable locale .. quel qu'un peut m'expliquer plus ?? Merci d'avance !!

    -----
    Dernière modification par JPL ; 20/10/2013 à 17h31. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    galerien69

    Re : Allocation Dynamique

    slt,

    Code:
    int main(void){
     int* ptr = 2; //mettons que ptr a l'adresse 2.
     fonctionAllocation(ptr);
    }
    fonctionAllocation(int* bob, int nbElem){
    //ici, on a bob qui vaut la même que ptr passé en paramètre.
    //idem, bob==2;
    bob=5 //ici ptr nest pas modifié
    bob=2 //mais gardons la même adresse que ptr
    *bob=8;
    //on a *ptr==8
    }
    (je passe les segfaults).


    Du coup pour modifier la valeur de ptr, tu passes une référence
    Code:
    int main(void){
     int* ptr = 2; //mettons que ptr a l'adresse 2.
     fonctionAllocation(&ptr);
    }
    fonctionAllocation(int** bob, int nbElem){
    //ici, on a bob qui vaut &ptr
    //*bob pointe donc sur ptr
    *bob=5 //signifie donc ptr=5
    }
    Dernière modification par galerien69 ; 20/10/2013 à 17h28. Motif: conjuguézon

  3. #3
    albanxiii
    Modérateur

    Re : Allocation Dynamique

    Bonjour,

    Vous voyez pourquoi un passage par valeur ne fonctionnera pas ?

    int *ptr contient une adresse, qui sera celle où on va allouer des blocs de mémoire
    Comme vous faites un passage par référence, il faut donner l'adresse de l'objet que vous manipulez, ici, l'adresse de *ptr.
    Dans la fonction, vous utilisez cette adresse **ptr pour écrire dans la valeur de l'objet pointé, *ptr, le résultat du malloc, c'est à dire l'adresse d'un bloc de mémoire libre.

    Est-ce clair (j'ai des doutes...) ?
    Au besoin, faite un petit dessin, avec les cases mémoire et leurs adresses, ce que vous passez à la fonction d'allocation, etc.

    @+
    Not only is it not right, it's not even wrong!

  4. #4
    andromedae

    Re : Allocation Dynamique

    Merci pr vos réponses !

    oui c'est claire albanxii MERCI infiniment

  5. A voir en vidéo sur Futura

Discussions similaires

  1. allocation dynamique C
    Par Jack dans le forum Programmation et langages, Algorithmique
    Réponses: 17
    Dernier message: 21/10/2012, 10h27
  2. Allocation dynamique
    Par invite8a011b82 dans le forum Programmation et langages, Algorithmique
    Réponses: 16
    Dernier message: 03/02/2011, 16h43
  3. problème insertion fichier .txt dans une allocation dynamique
    Par invitef838f58f dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 09/01/2011, 18h32
  4. [language C]Allocation mémoire.
    Par piwi dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 05/07/2010, 08h33
  5. allocation dynamique c/c++
    Par invite38a6a978 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 16/06/2008, 13h19