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 :

Problème fonction affichage et pointeurs


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Par défaut Problème fonction affichage et pointeurs
    Bonjour,
    j'aimerais compiler le programme suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdlib.h>
    #include <stdio.h>
     
    int main () {
      char *pc;
      *pc = 34;
      printf ("Contenu de la variable pointee par pc est: %c\n",*pc);
      printf ("Adresse de la variable en hexa est: %p\n",&pc);
      return EXIT_SUCCESS;
    }
    Je compile sans erreur et quand je lance le programme, j'ai le message d'erreur suivant: Erreur de segmentation (core dumped)

    Merci!

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    Quand tu déclares :

    Le programme réserve 8 octets de mémoire en variable local. Ces 8 octets de mémoires sont destinés à contenir une adresse qui pointera vers quelque part dans la mémoire.

    Or, en C, si tu n'initialises pas une variable, son contenu est aléatoire (disons que c'est ce qu'il y avait en mémoire avant qui est utilisé).

    Par conséquent, on en déduit que ce qui avait en mémoire avant ne correspond pas à une adresse valide dans ton programme. Tu feras donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* pc = malloc(sizeof(char));
    *pc = 34;
    free(pc);
    Et tout ira mieux. Évidemment ta variable pc pointe vers un espace non local donc qui n'est pas libéré implicitement et donc qu'il faut libérer à la main avec free.

    Je te conseille vivement de lire un livre sur le C.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Pour stocker la donnée (34), il te faut définir un objet : char data;.
    Tu veux accéder à cet objet explicitement par son adresse et tu crées un objet pour stocker cette adresse (pointeur) et tu mets l'adresse dedans : char * pc = &data;.
    Le programme devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdlib.h>
    #include <stdio.h>
    int main (void) 
    {
      char data; 
      char *pc = &data;
      *pc = 34;                                                       // ou data = 34
      printf ("Contenu de la variable pointee par pc est: %c\n",*pc); // ou data
      printf ("Adresse de la variable en hexa est: %p\n",pc);         // ou &data
      printf ("Adresse du pointeur en hexa est: %p\n",&pc);
      return EXIT_SUCCESS;
    }

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut
    Salut,
    Dans le C tu as aussi besoin d'allocation mémoire,
    Ici tu veux stocker 34 dans pc, qui correspond à un caractère dans la table ASCII, sans y avoir alloué de la mémoire.
    Essaye donc plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main ()
    {
      char *pc;
     
      pc = malloc(sizeof(*pc) * 1);
      *pc = 34;
     
     printf ("Contenu de la variable pointee par pc est: %c\n",*pc);
     printf ("Adresse de la variable en hexa est: %p\n",&pc);
    }
    Sans le malloc, tu essayais donc de toucher de la mémoire qui n'était pas allouée a ton programme, d'où le SEGMENTATION FAULT

    Bonne journée

  5. #5
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut
    attention, dans cette affichage, tu n'as pas besoins du '&' étant donné que "pc" est déjà un pointeur sur char.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("Adresse de la variable en hexa est: %p\n",pc);

  6. #6
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut
    En effet,
    Je lui expliquais juste pourquoi son programme SEGFAULT

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/11/2007, 10h26
  2. Problème fonction affichage listes déroulantes
    Par JLDR69 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/09/2006, 19h06
  3. Problème d'affichage en fonction de la situation
    Par HwRZxLc4 dans le forum Langage
    Réponses: 4
    Dernier message: 14/08/2006, 21h07
  4. [structure et pointeur] problème d'affichage
    Par kitsune dans le forum C
    Réponses: 17
    Dernier message: 22/03/2006, 22h20
  5. Réponses: 3
    Dernier message: 10/01/2006, 14h01

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