Bonjour,

Je suis un novice en langage C.

Le problème que je n'arrive pas à résoudre concerne un pointeur sur une structure que j'ai créée (TNoeud).

J'envoie ce pointeur (racine) en paramètre d'entrée d'une fonction que j'ai appelé inserer. Celle-ci affecte au pointeur racine l'adresse d'un autre pointeur (noeud)

A la sortie de cette fonction, je m'attends à ce que le pointeur racine dans ma fonction main contienne l'adresse du pointeur créé dans la fonction inserer.

Or, il n'en est rien le pointeur racine n'a pas été modifié. Pourquoi ? comment faire pour qu'il garde la valeur obtenue dans la fonction inserer ?

Voici le code :
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
#include <stdio.h>
#include <stdlib.h>
 
 
typedef struct Tnoeud Tnoeud;
struct Tnoeud
{
  int info;
};
 
 
void inserer(Tnoeud *laRacine, int *lenombre)
{
  //je cree un pointeur et reserve dynamiquement
  //de la memoire egale à la taille de la structure Tnoeud
  Tnoeud *noeud=malloc(sizeof(Tnoeud));
 
  *lenombre=*lenombre+10;
  noeud->info=*lenombre;
  //j'affecte à mon paramètre d'entrée l'adresse de la
  //cellule memoire créée
  laRacine=noeud;
  printf("pendant : %d\n", laRacine);
 
}
 
int main()
{
    // je declare un pointeur racine sur la structure Tnoeud
    //en l'intialisant à null
    Tnoeud *racine=NULL;
    int nombre=10;
 
    printf("avant : %d %d\n", racine, nombre);
    // j'appelle ma fonction inserer sur le pointeur racine
    inserer(racine, &nombre);
    // au retour de la fonction je m'attends à ce que racine
    //ait pris la valeur obtenue dans la fonction inserer
    printf("apres : %d %d\n", racine, nombre);
    // il n'en est rien la valeur de racine est toujours
    // la même. Pourquoi ? comment faire pour qu'elle garde
    // la valeur attribuée dans la fonction inserer ?
    return 0;
}
Je vous remercie beaucoup de votre aide. Bien cordialement !