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 :

malloc : problème avec sizeof ?


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut malloc : problème avec sizeof ?
    Bonjour,

    Pourriez-vous m'aider car je ne comprends pas pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #define NB_PIONS 3
    ...
    	pid_t *tab_process= (pid_t*)malloc(NB_PIONS * sizeof(pid_t));
    	printf("\n\n\n\nsizeof(tab_process) : %d\n", sizeof(tab_process));
    pq le résultat retourné est 4 alors que NB_PIONS vaut 3????


    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    sizeof(tab_process) te retourne la taille de ton pointeur, pointeur fait 4 octets sur processeur 32 bits, c'est un pointeur, pas un tableau, tu ne peux pas connaître le nombre d'octets alloués à l'aide de sizeof().

    De plus, évite de faire un cast devant malloc() en C. C'est inutile et ça peut masquer des erreurs.

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par samplaid Voir le message
    Bonjour,

    Pourriez-vous m'aider car je ne comprends pas pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #define NB_PIONS 3
    ...
    	pid_t *tab_process= (pid_t*)malloc(NB_PIONS * sizeof(pid_t));
    	printf("\n\n\n\nsizeof(tab_process) : %d\n", sizeof(tab_process));
    pq le résultat retourné est 4 alors que NB_PIONS vaut 3????


    merci
    Une bonne manière de conserver une trace de la taille du tableau tab_process est de stocker cette valeur avec tab_process dans une structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    stuct TabProcess {
        pid_t *processes;
        size_t n_proc;
    };
     
    /*...*/
    struct TabProcess tab = {0};
     
    tab.n_proc = NB_PIONS;
    tab.processes= malloc(tab.n_proc * sizeof *tab.processes);
    if (tab.processes != NULL)
    {
        /*...*/
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

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

Discussions similaires

  1. problème avec sizeof
    Par Porteuris dans le forum Débuter
    Réponses: 14
    Dernier message: 11/12/2008, 10h32
  2. Problème avec malloc sizeof
    Par BATAK dans le forum Débuter
    Réponses: 10
    Dernier message: 06/04/2008, 12h21
  3. problème avec sizeof
    Par PIL dans le forum C
    Réponses: 10
    Dernier message: 10/09/2006, 12h12
  4. Problème avec sizeof(...) : erreur de taille
    Par Invité dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 06/05/2006, 12h53
  5. Problème avec malloc.
    Par kmitz dans le forum C
    Réponses: 2
    Dernier message: 25/03/2006, 18h05

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