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 :

Réinitialisation de pointeur pointé


Sujet :

C

  1. #1
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut Réinitialisation de pointeur pointé
    Bonjour,

    Voila comme vous pouvez le voir dans le code ci dessous, à la ligne qui est commenté par "// ICI", je réinitialise hTmp à NULL, mais comment faire pour réinitialisé le pointeur que celui-çi pointe (c'est à dire htbl[key_hash]) à NULL tout en passant par hTmp (je suis claire ? )

    Je pourais très bien faire
    Mais par curiosité je veux juste passé par hTmp.

    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
     
    void hashtbl_erase(HTBL **htbl, char *key)
    {
    	unsigned int key_hash;
    	HTBL *hTmp, *hPrev;
     
    	key_hash = hach_string(key);
     
    	hTmp = htbl[key_hash];
    	hPrev = NULL;
     
    	while(hTmp != NULL) {
    		if (strcasecmp(hTmp->key, key) == 0) {
    			if (hPrev != NULL) {
    				hPrev->next = hTmp->next;
    			} else {
    				htbl[key_hash] = hTmp->next;
    			}
    			free(hTmp->key);
    			hTmp->key = NULL;
    			free(hTmp);
    			hTmp = NULL; // ICI
    			return;
    		}
    		hPrev = hTmp;
    		hTmp = hTmp->next;
    	}
    }
    Merci !

  2. #2
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Parce que ce que tu fais c'est pareil que faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int x,y;
    y=3;
    x=y;
     
    x=0; // ICI
    Et là tu es d'accord, que y vaut toujours 3...

    Par contre, cela "marche", il faut que tu ai un pointeur sur la variable à modifier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int *x,y;
    y=3;
    x=&y;
     
    *x=0; //ICI

  3. #3
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Hm oui ok, désolé j'était un peu perdu avec les * entres les tableau de pointeurs et les pointeurs de pointeurs..

    Merci ^^

  4. #4
    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 D[r]eadLock
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int *x,y;
    y=3;
    x=&y;
     
    *x=0; //ICI
    Pour des questions de lisibilité du code, ce n'est toutefois pas une pratique conseillé de définir des variables de type différents sur la même ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* Déconseillé! */
    int *x,y;
    y=3;
    x=&y;
     
    /* Bonne pratique! C'est également souvent conseillé d'initialiser les 
    à NULL (même si le pointeur px est initialisé deux lignes plus bas, c'est une
    bonne habitude à prendre */
    int *px = NULL; 
    int y = 3;
    x = &y;
    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. Réponses: 4
    Dernier message: 23/12/2009, 12h26
  2. Réponses: 12
    Dernier message: 25/06/2008, 19h27
  3. Réponses: 8
    Dernier message: 30/12/2005, 13h47
  4. Tester qu'un pointeur pointe une zone mémoire valide
    Par Captain_JS dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/08/2005, 19h23
  5. Réponses: 11
    Dernier message: 24/07/2003, 09h24

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