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 de compilation avec les structures


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Probléme de compilation avec les structures
    Bonjour !

    C'est une portion de mon fichier source c
    Je ne comprend pas pourquoi la commande (*(f.prm[1])).nomP; cause un problème

    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
     
    //définition de deux structures
    struct param
    {
    	char type[200];
    	char nomP[];
    };
    struct Fonction
    {
    	char type_ret[10];
    	char nomF[10];
    	int nb_params;
    	struct Param* prm[5];
    };
    //défintion de la fonction creer()
    struct Fonction* creer()
    {
    	struct Fonction f;
    	(*(f.prm[1])).nomP;
    	return(&f);
    }
    normalment f.prm[1] est un pointeur sur une structure de type param
    ansi (*(f.prm[1])).nomP; me permet d'acceder au champ nomP de param

    Pourriez vous m'aider?
    merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 137
    Points
    23 137
    Par défaut
    Bonjour,

    Quand tu as une erreur , il faudrait nous montrer le message d'erreur.

    Déclarer un pointeur n'alloue pas l'objet pointé :
    f.prm[1] existe mais pointe n'importe où.
    *(f.prm[1]) n'existe pas.
    (*(f.prm[1])).nomP segfault à venir

  3. #3
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Autre gravissime erreur de principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Fonction* creer()
    {
    	struct Fonction f;
    ...
    	return(&f);
    }
    La fonction retourne l'adresse d'une variable LOCALE f. Or les variables locales sont détruites en sortie de la fonction (allocation automatique). Le programme qui appelle creer() récupère l'adresse d'une variable qui n'existe plus -> plantage.
    Si on veut que f, créé par la fonction, survive à la sortie de la fonction, le seul moyen est de la créer par allocation dynamique (malloc() et consoeur)

    Règle : on ne doit jamais, de quelque manière que ce soit, renvoyer l'adresse d'une variable locale.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    merci beaucoup Neckara et Diogene pour vos réponses très enrichissantes

Discussions similaires

  1. Problème de taille avec les structures
    Par Folkene dans le forum Débuter
    Réponses: 9
    Dernier message: 20/01/2010, 18h13
  2. problème de syntaxe avec les structures .top et .left
    Par frisou65 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 01/09/2008, 16h10
  3. Réponses: 1
    Dernier message: 16/07/2008, 03h34
  4. problème d'affichage avec les structures
    Par jlion5 dans le forum C
    Réponses: 1
    Dernier message: 03/05/2008, 14h13
  5. Réponses: 4
    Dernier message: 18/12/2007, 22h54

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