malloc ?
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

malloc ?



  1. #1
    Alaouiii

    malloc ?


    ------

    Bonjour,
    j'ai une question qui a tomber sur ma tête sur les pointeurs dans le langage C
    int p ;// ici on a concerné une case memoire de taille sizeof(int)=4 bits pour l'entier p
    int *p ;// ici on a concerné une case memoire de taille sizeof(int *)=4 bits pour le pointeur p
    pour ce dernier cas je me demande pourquoi on fait malloc après ,alors qu'on a déja allouer de la mémoire, car on fait toujours après int *p ; p=(int*)malloc(sizeof(int)) ;
    en d'autre terme c'est quoi l'intèrêt de la fonction malloc ?
    cordialement ,

    -----

  2. #2
    Jack
    Modérateur

    Re : malloc ?

    int p ;// ici on a concerné une case memoire de taille sizeof(int)=4 bits pour l'entier p
    int *p ;// ici on a concerné une case memoire de taille sizeof(int *)=4 bits pour le pointeur p
    Ne pas confondre bit et byte. En principe, 1 byte = 8 bits.
    pour ce dernier cas je me demande pourquoi on fait malloc après ,alors qu'on a déja allouer de la mémoire
    tu confonds la place réservée au pointeur avec celle réservée pour la donnée pointée. Les 2 tailles sont identiques, mais si ton pointeur devait pointer un caractère, il te faudrait 4 octets pour le pointeur et un seul pour le caractère, ce qui prouve bien que ce sont 2 choses différentes.

  3. #3
    whoami

    Re : malloc ?

    Bonjour,
    Citation Envoyé par Jack Voir le message
    Les 2 tailles sont identiques, mais si ton pointeur devait pointer un caractère, il te faudrait 4 octets pour le pointeur et un seul pour le caractère, ce qui prouve bien que ce sont 2 choses différentes.
    Et il ne faut surtout pas partir du principe quelles sont forcément égales, car ce n'est pas le cas !

    Et c'est la source de pas mal de bugs de programmes 32 bits compilés en 64 ...

  4. #4
    Jack
    Modérateur

    Re : malloc ?

    Et il ne faut surtout pas partir du principe quelles sont forcément égales, car ce n'est pas le cas !
    Bien sur. je faisais allusion à son cas particulier.

    Pour être plus précis donc, la taille des int et des pointeurs n'étant pas garantie d'un système et d'un compilateur à l'autre, il est que le programme prévoie le calcul de la taille des données dès qu'il y a besoin d'effectuer de l'allocation dynamique de mémoire et d'une manière plus générale dès que l'on doit tenir compte de la taille des données dans son programme.
    Merci sizeof()

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

    Re : malloc ?

    d'accord ,bien si j'ai compris alors si je declare un pointeur de type int (ex int * aici on réserve de la mémoire pour l'int *p et lorsque on fait malloc (ex a=(int*)malloc(int) on réserve de la mémoire pour le pointeur qui pointé sur cette int .est ce que c'est juste ?
    bien , et si on fait comme ça :
    int * p;
    int * q; // (*p!=*q)(valeurs aléatoire seront affecter par la mémoire )
    p=(int*)malloc(int);
    q=p ;
    ici q va pointer sur l'int *q qui est pointé par p , alors *p=*q ? et si on au lieu de int *q ; on met char * q , je pense qu'il va générer un erreur de conversion .

  7. #6
    Spazi

    Re : malloc ?

    Oui, int * p réserve de la mémoire pour le pointeur, pour pouvoir stocker l'adresse pointée, et le malloc va réserver la zone mémoire qui sera pointé.

    Sur votre exemple, oui, *p == *q, mais aussi p == q (vu qu'ils pointent la même adresse)
    Et non pour la génération d'erreur, il n'y a pas de raison, mais vous pouvez tester par vous-même.

  8. #7
    CM63

    Re : malloc ?

    Bonjour,

    Pour faire du code portable, il vaut mieux utiliser sizeof(<type> *) dans le malloc, par exemple:

    Code:
    float *x:
    x = malloc(sizeof(float *));
    x=3.14159;
    A plus

  9. #8
    whoami

    Re : malloc ?

    Bonjour,
    Citation Envoyé par CM63 Voir le message
    Bonjour,

    Pour faire du code portable, il vaut mieux utiliser sizeof(<type> *) dans le malloc, par exemple:

    Code:
    float *x:
    x = malloc(sizeof(float *));
    x=3.14159;
    A plus
    Ah bon !

  10. #9
    Bluedeep

    Re : malloc ?

    Citation Envoyé par CM63 Voir le message
    Bonjour,

    Pour faire du code portable, il vaut mieux utiliser sizeof(<type> *) dans le malloc, par exemple:

    Code:
    float *x:
    x = malloc(sizeof(float *));
    x=3.14159;
    Affecter une valeur avec virgule à un pointeur; pas mal. Sur quel processeur ?
    Je suis pas spécialiste du C, que je n'ai pas pratiqué depuis au moins 20 ans mais on suppose qu'il faut lire
    Code:
    *x=3.14159;

  11. #10
    CM63

    Re : malloc ?

    Bonjour,

    Citation Envoyé par Bluedeep Voir le message
    Affecter une valeur avec virgule à un pointeur; pas mal. Sur quel processeur ?
    Je suis pas spécialiste du C, que je n'ai pas pratiqué depuis au moins 20 ans mais on suppose qu'il faut lire
    Code:
    *x=3.14159;
    Oui, autant pour moi, merci pour la correction. Donc le code final est :

    Code:
    float *x;
    x = malloc(sizeof(float *));
    *x=3.14159;

    A plus

  12. #11
    whoami

    Re : malloc ?

    Bonjour,
    Citation Envoyé par CM63 Voir le message
    Oui, autant pour moi, merci pour la correction. Donc le code final est :

    Code:
    float *x;
    x = malloc(sizeof(float *));
    *x=3.14159;
    Je ne crois pas : sizeof(float *) renvoie la taille du pointeur, pas celle du float !

  13. #12
    Jack
    Modérateur

    Re : malloc ?

    C'est même sûr!
    En clair:
    Code:
    float *x;
    x = malloc(sizeof(float)); // ou sizeof(x)
    *x=3.14159;

  14. #13
    CM63

    Re : malloc ?

    Ah oui, décidément!

  15. #14
    polo974

    Re : malloc ?

    CM63 a la tête dans les étoiles...
    Jusqu'ici tout va bien...

  16. #15
    Bluedeep

    Re : malloc ?

    Citation Envoyé par polo974 Voir le message
    CM63 a la tête dans les étoiles...
    C'est pour ça qu'il oublie les '*'

  17. #16
    CM63

    Re : malloc ?

    Bonjour,

    Citation Envoyé par polo974 Voir le message
    CM63 a la tête dans les étoiles...
    Ben c'est vrai que ça n'a pas l'air d'être une bonne année, je commence par m'y prendre à 3 fois pour décomposer 2016 en facteurs premiers, et ensuite je m'y prend à 3 fois pour écrire correctement un code C digne des premières minutes de cours de ce langage. JE crois que je vais retourner me coucher

  18. #17
    Jack
    Modérateur

    Re : malloc ?

    J'espère que tu es en retraite sinon tu risques de pointer à pole emploi

  19. #18
    JPL
    Responsable des forums

    Re : malloc ?

    Citation Envoyé par CM63 Voir le message
    JE crois que je vais retourner me coucher
    Et c'est c'est pour rejoindre quelqu'un, là aussi tu vas t'y reprendre à trois fois avant que ce soit la bonne ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

Discussions similaires

  1. langage C : malloc()
    Par cosmoff dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 27/10/2015, 22h35
  2. XC8 et malloc
    Par petitnul12 dans le forum Électronique
    Réponses: 4
    Dernier message: 30/06/2013, 23h40
  3. Malloc et free
    Par patagouin dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 10/01/2013, 15h23
  4. Fonction malloc(langage C)
    Par deyni dans le forum Programmation et langages, Algorithmique
    Réponses: 28
    Dernier message: 20/10/2012, 15h57
  5. problème avec malloc en C
    Par invite5d5dfac0 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 06/03/2009, 18h33