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

Langage C++ Discussion :

problème lecture pointeur


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut problème lecture pointeur
    Bonjour,

    J' ai un problème de lecture d'un pointeur que je passe en paramètre d'une fonction.
    En fait j'appelle une fonction qui effectue une allocation memoire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    int AllocateRAM(int *l_config )
    {
    	int		l_rc = NOERROR;
     
     
    	l_config = (int *) malloc(100 * sizeof(int));
     
            if(NULL == l_config)
    	{
    		l_rc = ERROR;
    	}
     
    	return l_rc;
    }
    j'ai raccourci un peu la fonction au principal.
    Lorsque je veux utiliser cette fonction comme ceci par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    int ma_fonction( )
    {
       int l_rc = NOERROR;
       int *l_ptr_alloc = NULL;
     
       if( NOERROR != AllocateRAM(l_ptr_alloc ))
       {
          l_rc = ERROR;
       }
       else
       {
           printf("adresse zone memoire: 0x%x\n",  ptrAlloc);
       }
     
       return l_rc;
    }
    dans mon printf, je récupère toujours un pointeur nulle.

    Quel est le problème?

    Je vous remercie.

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    C'est parce qu'en C++ le passage de paramètres se fait par copie.

    Il faut indiquer le passage par référence via "&".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <cstdlib>
    #include <cassert>
     
    void fc(int* p)
    {
    	p = new int;
    }
     
    void fr(int*& p)
    {
    	p = new int;
    }
     
    int main(void)
    {
    	int* p = NULL;
     
    	assert(p == NULL);
    	fc(p);
    	assert(p == NULL);
    	fr(p);
    	assert(p != NULL);
    }
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par seriousme Voir le message
    C'est parce qu'en C++ le passage de paramètres se fait par copie.

    Il faut indiquer le passage par référence via "&".

    Ok merci
    je vais essayer ca.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Merci cela fonctionne très bien.
    On peut dire que le sujet est résolu.

    C'est le même principe pour le C?

    Encore merci

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par totoscill Voir le message
    Merci cela fonctionne très bien.
    On peut dire que le sujet est résolu.

    C'est le même principe pour le C?

    Encore merci
    Non, le C ne connait pas les références...

    En C, il faudrait passer par un pointeur de pointeur si tu souhaites modifier le pointeur, ce qui nécessite de "jouer" avec les "ce qui est pointé par":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /* Code C */
    int AllocateRAM(int ** l_config ) /* et non int   * */
    {
    	int		l_rc = NOERROR;
     
     
    	*l_config = (int *) malloc(100 * sizeof(int)); /* et non l_config */
     
            if(NULL == *l_config) /* et non l_config */
    	{
    		l_rc = ERROR;
    	}
     
    	return l_rc;
    }
    Au passage, il faut être attentif au fait que int * & un_nom (une référence sur un pointeur ) fonctionne mais que int &* un_nom ne fonctionnera pas car il est impossible de créer un pointeur sur une référence

    Si tu as eu ta réponse peux tu penser au bouton
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. problème lecture Deque de pointeurs sur objet
    Par gonzo59 dans le forum Débuter
    Réponses: 11
    Dernier message: 14/05/2009, 14h57
  2. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  3. Problème lecture de nombre dans un fichier en c++
    Par knecmotet dans le forum C++
    Réponses: 1
    Dernier message: 28/10/2004, 15h48
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

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