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 :

Prog malloc question ?


Sujet :

C

  1. #1
    En attente de confirmation mail Avatar de wareq
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 257
    Points : 94
    Points
    94
    Par défaut Prog malloc question ?
    Bonjour,

    j'ai fait un prog qui consiste a reserver de l'espace mémoire grace a malloc et a utiliser les pointeurs... celui-ci est corrigé par mon tuteur et compilé parfaitement, cependant afin de faire un petit compte-rendu , jai mis d'abord des commentaires mais je ne sais pas si c'est vraiment ça si j'ai bien compris ce que fait le prog, vous en dites quoi de la description du prog vous?

    Merci.. (et merci de me corriger pour les commentaires // car y'a surement des erreurs)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include<stdio.h>
    #include<stdlib.h>
    main()
    {	 
    	int i = 2; // déclaration et initialisation de i à 2.
    	int*pi;	   // déclaration de l'entier de la variable pointée par pi
    	pi=(int*)malloc(sizeof(int)); // définition d’un espace mémoire de type entier
    	*pi = 2 ;	// affectation de la valeur 2 au contenu de la variable pointée par pi 
    	printf("L'adresse réservée par malloc est : %x\n",pi);
    	printf("Le contenu de la variable pointée par pi est:%d\n",*pi);
    }

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut Re: Prog malloc question ?
    Citation Envoyé par wareq
    celui-ci est corrigé par mon tuteur et compilé parfaitement
    Tu peux demander à ton tuteur de corriger les commentaires...
    J'avoue que celui-ci m'amuse bien (les autres sont bons):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    // déclaration de l'entier de la variable pointée par pi
    C'est presque du français ! (comme le titre de ton post)

  3. #3
    En attente de confirmation mail Avatar de wareq
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 257
    Points : 94
    Points
    94
    Par défaut
    Le problèm c'est que jedois le faire seul et lui rendre .... euh ouai c'est plutot "déclaration du pointeur d'entier pi" tout simplement non ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    oui, c'est plutôt ça.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Attention aux commentaires initules et de ne pas tomber dans le "trop de commentaire".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int i = 2; // déclaration et initialisation de i à 2.
    C'est le b a ba de la programmation, inutile de commenter je pense

  6. #6
    En attente de confirmation mail Avatar de wareq
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 257
    Points : 94
    Points
    94
    Par défaut
    Ok merci bien

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ton tuteur ne devrait pas être content, tu as oublié de tester le retour de malloc, c'est un bon réflexe à prendre, même si ici le retour devrait être différent de NULL.
    Autre chose, à quoi sert le i ici, sinon à donner lieu à un commentaire ?
    la fonction main est mal déclarée : Cette fonction devrait retourner 0, ou EXIT_SUCCESS, défini dans stdlib.h
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    En attente de confirmation mail Avatar de wareq
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 257
    Points : 94
    Points
    94
    Par défaut
    Si je devais faire un diagramme structurel de ce prog , je sais pas si vous voyez ce que je veux dire, le main envoi des paramètres a malloc() et malloc() retourne un paramètre au main.

    Veuillez me signaler si ce que je dis est juste ou pas.

    Le main envoi un pointeur d'entier pi et malloc () retourne sizeof ... jesuis pas du tout sur de moi merci de me rectifier ...

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    ben, tu inverses les flèches et tu as presque bon...

    Le main() envoit à malloc() la taille demandée en octets (ici, sizeof(int)) te malloc() renvoit une adresse, adresse que le main() stocke dans un pointeur sur entier appelé "pi".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    En attente de confirmation mail Avatar de wareq
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 257
    Points : 94
    Points
    94
    Par défaut
    Ok donc dans un schéma je met une fleche de main vers malloc avec pour nom "sizeof (int)" et je met quoi pour malloc() vers main , "adresse" c'est tout?
    Ou plutot c'est "adresse de pi" ? Ou "adresse du pointeur pi"?

    je vois pas trop la..

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est le pointeur pi qui contient l'adresse retournée par malloc.
    Cette adresse est celle d'un bloc de 4 octets sur le tas.

    À aucun moment l'adresse de pi n'est évoquée.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Bonjour

    Citation Envoyé par Trap D
    Cette fonction devrait retourner 0, ou EXIT_SUCCESS, défini dans stdlib.h
    ...ou EXIT_FAILURE / une valeur differente de 0 en cas de probleme (malloc qui renvoie NULL)...


    Citation Envoyé par Trap D
    Cette adresse est celle d'un bloc de 4 octets
    Pas forcement 4

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Smortex >> oui tout à fait pour le EXIT_FAILURE je me suis un peu avancé en pensant que le malloc réussirait toujours pour une taille aussi faible.
    Par contre, on ne peut pas faire de suppositions sur la taille réellement allouée par le malloc.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est vrai, j'ai fait une erreur en donnant une taille précise.

    Disons que dans le cas actuel, malloc() a retourné NULL ou bien l'adresse d'un bloc assez grand pour contenir un int.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. [malloc] questions sur l'allocation dynamique
    Par dahtah dans le forum POSIX
    Réponses: 4
    Dernier message: 21/10/2011, 01h24
  2. Recoder malloc -> Questions sur la mémoire
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 15/03/2006, 18h11
  3. prog en msdos, question
    Par 123quatre dans le forum Windows
    Réponses: 1
    Dernier message: 24/11/2005, 20h42
  4. Encore une question sur malloc
    Par IG88 dans le forum C
    Réponses: 5
    Dernier message: 23/06/2004, 15h35
  5. question general sur malloc
    Par vince3320 dans le forum C
    Réponses: 8
    Dernier message: 23/06/2004, 10h39

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