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 :

Caster le malloc en C ? Avis sollicités


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 140
    Par défaut Caster le malloc en C ? Avis sollicités
    Bonsoir,

    Voilà, j'ai pu me rendre compte que les avis divergeaient sur la nécessité de caster les malloc en C. Du coup, je ne sais pas à quoi m'en tenir.

    A noter que je ne compile qu'en C, avec le compilateur gcc inclus dans CodeBlocks.

    Quelques exemples pris aléatoirement dans mon programme en cours de codage où j'utilise malloc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ((ptr_RegHide->ZwPath = malloc(n)) != NULL)
        {
          strncpy(ptr_RegHide->ZwPath, tempPath, n-1);
          ptr_RegHide->ZwPath[n-1] = '\0';
        }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if ((pRet = malloc(size+1)) == NULL)
        printf("Erreur d'allocation mémoire...\n");
    J'en profite pour demander un autre avis : est-il conseillé de mettre systématique sizeof(char) ou sizeof(unsigned char) au lieu de 1 ( donc de rien ) ?

    Merci

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Merillym Voir le message
    Voilà, j'ai pu me rendre compte que les avis divergeaient sur la nécessité de caster les malloc en C. Du coup, je ne sais pas à quoi m'en tenir.
    Pour les différents arguments concernant ce point, je t'invite à regarder cette discussion.

    A mon avis, quelque soit ton choix, le plus important est d'être cohérent au sein d'un projet.

    Citation Envoyé par Merillym Voir le message
    J'en profite pour demander un autre avis : est-il conseillé de mettre systématique sizeof(char) ou sizeof(unsigned char) au lieu de 1 ( donc de rien ) ?
    Personnellement, j'ai une préférence pour l'utilisation de la variable allouée dans le style de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *ptr = malloc(50 * sizeof(*ptr));

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Citation Envoyé par Merillym Voir le message
    J'en profite pour demander un autre avis : est-il conseillé de mettre systématique sizeof(char) ou sizeof(unsigned char) au lieu de 1 ( donc de rien ) ?
    Certains types n'ont pas toujours la même taille d'une architecture à l'autre (bon ce n'est pas le cas de char et unsigned char, je te l'accorde , mais évites de prendre cette habitude).

    Pour le cast de malloc, la FAQ te dit pourquoi ce n'est pas obligatoire, après la discussion indiquée par gl débat sur le fait de dire que c'est "de mauvais style" ou pas.

    Cordialement,
    Idriss

  4. #4
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Certains types n'ont pas toujours la même taille d'une architecture à l'autre (bon ce n'est pas le cas de char et unsigned char, je te l'accorde , mais évites de prendre cette habitude).
    Ceci ne s'applique que dans le cas ou tu es habitué a utiliser des type INT
    Si tu as pris la bonne habitude et que tu souhaite maitriser au mieux ton truc (peu importe l'archi) alors tu t'es lancé sur les bon type qui EUX sont sur de ne pas bougés (long, short, char ).

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par rilou Voir le message
    Si tu as pris la bonne habitude et que tu souhaite maitriser au mieux ton truc (peu importe l'archi) alors tu t'es lancé sur les bon type qui EUX sont sur de ne pas bougés (long, short, char ).
    Non plus, la taille d'un long ou d'un short n'est pas plus garantie que celle d'un int, seule la taille minimale (ou plus exactement la plage minimale) est garantie.
    Quant à char, s'il est garanti que sizeof(char) vaille 1, comme les autres types seule la plage minimale est garantie, pas sa taille exact en nombre de bits.
    Au passage, contrairement aux autres types entiers, un simple char peut être signé ou non signé.

    Les seuls types dont la taille (ainsi que d'autres éléments de leur représentation) est garantie sont les type int8_t, uint8_t, int16_t, etc. Toutefois ces types n'ont été introduit qu'en C99 (donc pas disponibles sur un compilateur supportant seulement C90) et leur support est conditionné à l'existence du type correspondant sur la plate-forme cible.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/09/2013, 20h37
  2. Caster ou pas le retour de malloc
    Par corrector dans le forum C
    Réponses: 82
    Dernier message: 08/03/2008, 15h26
  3. Je vous sollicite pour un avis
    Par lhpp dans le forum Mon site
    Réponses: 10
    Dernier message: 07/02/2007, 12h31
  4. Réponses: 4
    Dernier message: 03/12/2002, 16h47

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