Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

[language C]Allocation mémoire.



  1. #1
    piwi

    [language C]Allocation mémoire.


    ------

    Bonjour à tous.

    Je suis actuellement en train d'essayer d'assoir mes bases en programmation en C et j'ai une question à laquelle je ne parviens pas à trouver une réponse.

    Voilà, je m'intéresse en ce moment à l'allocation dynamique de mémoire. Pour tester cela j'écris simplement des petits programmes du style:
    Code:
    int variable = 0;
    printf("%d", sizeof(variable));
    Très simple donc.
    Maintenant je veux tester un peu la même chose avec un tableau auquel j'alloue de la mémoire de manière dynamique.
    Code:
    int* tableau = NULL; 
    printf("tableau: %d octets\n", sizeof(tableau));
    int entrees = 0; //En vue de controler le nombre d'entrées dans le tableau
    scanf("%d", entrees);// On connait à présent le nombre d'entrées dans le tableau
    
    //allocation de la mémoire au tableau 
    tableau = malloc(entrees * sizeof(int));
    if(tableau == NULL)
    {exit (0);}
    
    printf("tableau: %d octets\n", sizeof(tableau));
    free(tableau);
    Ce que je pense avoir fais:
    1. Créer un pointeur sur un entier (mémoire = 4 octets) (c'est mon tableau)
    2. Créer une variable entrees que l'utilisateur renseigne
    3. Allouer de la mémoire en fonction des entrées (nombre d'entrées x 4).

    Or ce n'est pas ce que j'observe à l'exécution où les deux sizeof(tableau) renvoient 4. Pourquoi?


    Cordialement,
    piwi
    Or quand je teste la mémoire allouée à tableau au début et à la fin du code, elle vaut toujours 4.

    -----
    Je sers la science et c'est ma joie.... Il parait.

  2. Publicité
  3. #2
    bzh_nicolas

    Re : [language C]Allocation mémoire.

    C'est normal tableau est (et reste) un int* donc sizeof(tableau) te donne la taille du pointeur (attention : pas la taille d'un int) dans les 2 cas.
    La mémoire est allouée, ça pas de soucis. Mais il ne faut pas oublier que tu alloues 4 int* et pas un tableau (structure qui n'existe pas, à proprement parler, en C).
    Si tu veux la taille allouée :
    entrees*sizeof(tableau)
    ou une boucle qui récupère la taille de chaque élément de tableau (ce qui correspond plus à la philosophie de ton programme si je l'ai bien comprise).

  4. #3
    piwi

    Re : [language C]Allocation mémoire.

    Merci pour ta réponse.

    Finalement c'est logique.

    Cordialement,
    piwi
    Je sers la science et c'est ma joie.... Il parait.

  5. #4
    polo974

    Re : [language C]Allocation mémoire.

    Citation Envoyé par piwi Voir le message
    Bonjour à tous.
    ...
    Code:
    int* tableau = NULL; 
    printf("tableau: %d octets\n", sizeof(tableau));
    int entrees = 0; //En vue de controler le nombre d'entrées dans le tableau
    scanf("%d", entrees);// On connait à présent le nombre d'entrées dans le tableau
     ...
    ...
    Cordialement,
    piwi
    ...
    Attention, il y a toujours des & en plus dans un scanf par rapport au printf...
    Façon de dire qu'au scanf, il faut passer un pointeur (de "entrees" ici), contrairement au printf...

    Code:
    int entrees = 0; 
    scanf("%d", &entrees);
    printf("%d", entrees);
    Jusqu'ici tout va bien...

  6. A voir en vidéo sur Futura
  7. #5
    bzh_nicolas

    Re : [language C]Allocation mémoire.

    Citation Envoyé par polo974 Voir le message
    Attention, il y a toujours des & en plus dans un scanf par rapport au printf...
    Façon de dire qu'au scanf, il faut passer un pointeur (de "entrees" ici), contrairement au printf...

    Code:
    int entrees = 0; 
    scanf("%d", &entrees);
    printf("%d", entrees);
    Bien vu, je l'avais raté celle-là...

Discussions similaires

  1. allocation dynamique c/c++
    Par Lt972 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 16/06/2008, 13h19
  2. Dérogation Allocation de Recherche
    Par Reace dans le forum Orientation après le BAC
    Réponses: 6
    Dernier message: 11/12/2007, 15h58
  3. Allocation de recherche INSERM
    Par Cessounette dans le forum Orientation après le BAC
    Réponses: 10
    Dernier message: 14/09/2007, 09h43
  4. allocation memoire sous windows 32 bits
    Par crussol07 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/10/2006, 21h01
Découvrez nos comparatifs produits sur l'informatique et les technologies.