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 :

Exercice C confusion pointeur, void et pointeur de void


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Exercice C confusion pointeur, void et pointeur de void
    Bonjour à tous,
    Voici un code très simple qui ajoute un noeud a un arbre binaire.
    Seulement le programme compile mais plante dès qu'on l'execute...
    Merci beaucoup de votre aide!

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
     
    typedef struct node_t node_t;
    struct node_t {
    	void * data;
    	struct node_t * lc, * rc ;
    };
     
    node_t ** bintree;
     
    void bt_add_value(node_t ** bt, int v){
    	while(*bt != NULL){
    		printf("a");
    		if( *(int*)((*bt)->data) < v)
    			bt= &((*bt)->rc);
    		else
    			bt= &((*bt)->lc);
    	}
    	printf("b");
    	*bt = malloc (1 * sizeof **bt);
    	assert(*bt);
    	*(int*)((*bt)->data) = v;
    	(*bt)->lc = (*bt)->rc = NULL;
    }
     
    int main (void){
    	*(int*)((*bintree)->data) = 5;
    	(*bintree)->lc = NULL;
    	(*bintree)->rc = NULL;
    	bt_add_value(bintree,10);
    	return 0;
    }

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonjour,

    Si tu travailles sous Unix et plus particulièrement sous Linux avec GCC, passe l'option « -g » à ta ligne de commande pour inclure les symboles de débogage et utilise ensuite gdb pour exécuter ton programme dans un environnement où tu pourras le dépanner.

    En l'occurrence, tu t'aperçois que ton programme plante dès la première ligne de la fonction main() ligne 29, et c'est normal car tu essaies de renseigner un champ d'une structure pointée par « bintree », mais d'une part tu n'as alloué que le pointeur et pas la structure qu'il est censé pointer et, d'autre part, ce pointeur lui-même est indéfini à l'endroit où tu l'utilises : tu l'as bien déclaré en variable globale mais tu ne lui a affecté aucune valeur. Il peut donc pointer n'importe où.

    Et au passage, les variables globales, c'est mal.

Discussions similaires

  1. Exercice tordu sur l'arithmétique des pointeurs
    Par Tamzoro dans le forum Débuter
    Réponses: 5
    Dernier message: 20/04/2015, 16h26
  2. pointeur de tableau pour fonction void
    Par giovedy dans le forum C
    Réponses: 4
    Dernier message: 01/08/2012, 18h18
  3. pointeur int vers void et retour de void vers int
    Par J4e8a16n dans le forum Débuter
    Réponses: 12
    Dernier message: 23/06/2009, 13h28
  4. [Pointeurs] partager un pointeur
    Par L. Sierra dans le forum C++
    Réponses: 9
    Dernier message: 30/11/2006, 18h16
  5. pointeurs, toujours les pointeurs :/
    Par giviz dans le forum C
    Réponses: 16
    Dernier message: 08/10/2003, 15h02

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