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 :

Structure* NomDeLaStructure me donne une erreur de violation


Sujet :

C

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Structure* NomDeLaStructure me donne une erreur de violation
    Bonjour tout le monde,

    Je crée une simple structure pour tenter de comprendre les structures dynamiques.

    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
    typedef struct 
    {
    	char TypeP;
    	char* Nom;
    	double km;
     
    }planets;
     
     
    void main()
    {
    	planets* LesPlanetes;
     
    	for (int i =0; i<5;i++)
    	{
    		LesPlanetes[i].Nom = "Test";
    	}
     
    }
    J'essaie d'affecter 5 fois, donc à 5 planètes différentes, le nom "Test" mais j'obtiens ce message d'erreur :

    unhandled exception in Astromie2.exe : 0xC000000005. Access Violation
    Je présûme que c'est un problème d'accès à la mémoire.

    planets* veut bien dire qu'on ne connait pas la taille au départ et qu'on peut alors l'étendre ?

    J'espère que vous pourrez m'aider.

    Merci d'avance.

    beegees

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Tu n'as pas allouer tes structures.

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Tu n'as pas allouer tes structures.
    Merci pour tes nombreuses réponses.

    Je dois les allouer avec malloc ?

    beegees

  4. #4
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    De préférence.

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    De préférence.
    Merci pour ta réponse.

    c'est bien les champs de la structure que je dois travailler avec malloc et non pas le nom de la structure qui est ici planets ?

    Merci encore.

    beegees

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par beegees Voir le message
    Merci pour ta réponse.

    c'est bien les champs de la structure que je dois travailler avec malloc et non pas le nom de la structure qui est ici planets ?

    Merci encore.

    beegees
    Si tu déclares un pointeur sur une structure de type planets, il te faut absolument allouer l'espace pointé avant d'allouer quoi que ce soit d'autre comme l'espace pour la chaîne de caractères !

    Ouvre un bon livre ou lit un bon tutoriel sur le C, on ne code pas au petit bonheur la chance !

    Je précise que ca se sont des principes qui sont étudiés dans tous livres pour débutants dignent de ce nom et de bons tutoriels comme on peut en trouver ici

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par beegees Voir le message
    Je dois les allouer avec malloc ?
    Par exemple...

  8. #8
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci pour tes réponses.

    Connais-tu un livre qui reprenne exactement ce que je demande ?

    Si oui tu peux me le citer et je vais l'acheter demain matin.

    beegees

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par beegees Voir le message
    Merci pour tes réponses.

    Connais-tu un livre qui reprenne exactement ce que je demande ?

    Si oui tu peux me le citer et je vais l'acheter demain matin.

    beegees
    Bin celui-ci conviens parfaitement pour des débutants : http://c.developpez.com/livres/#L2100490184 Qui reprenne exactement ce que tu demandes .... plus ou moins, ca traite de toutes les notions de bases du langage y compris l'allocation dynamique et les structures de données, etc...

    Sinon tu peux trouver pleins de cours et tutoriels en ligne sur le site de la rubrique et celui de Emmanuel également

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par beegees Voir le message
    Connais-tu un livre qui reprenne exactement ce que je demande ?

    Si oui tu peux me le citer et je vais l'acheter demain matin.
    Evidemment non (quoique le Braquelaire...).

    Un livre c'est fait pour donner des principes de base généraux. Ensuite, l'art de programmer, c'est, entre-autres, d'apprendre, par l'expérience, à élargir son raisonnement et de l'adapter à chaque situation.

    Un des principes énoncé dans les livres de C est

    "Tout pointeur doit être initialisé avec une adresse valide avant d'être utilisé."

    Un autre est

    "Par défaut, la valeur d'une variable locale est indéterminée."

    Cela posé, il faut un tout petit peu réfléchir pour comprendre que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main (void)
    {
       char *s;
     
       *s = 'A';
     
       return 0;
    }
    ne peut pas fonctionner, car la valeur de s est indéterminée[1]. On a donc pas le droit "d'utiliser" le pointeur (ici, "déréférencer avec l'opérateur *).

    Maintenant, relis ton code...

    ---------------
    [1] D'ailleurs, un compilateur bien réglé s'en aperçoit...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:3: warning: 's' might be used uninitialized in this function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 1 warnings

  11. #11
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci pour ta réponse Franck,

    J'irai acheter le premier livre de la liste demain matin.

    En attendant, je vais aller voir les tutos de Emmanuel (Emmanuel, est-ce qu'une partie d'un de tes tuto est consacré au structure dynamique ?)

    J'ai quand même une question, j'ai suivi les conseils de Nicolas, j'ai fais ma structure de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef struct
    {
    	char TypeL;
    	double kmLune;
    	char * NomLune;
    }Lunes;
     
    typedef struct 
    {
    	char TypeP;
    	char * Nom;  
        double km;
    	Lunes * tabLunes;
    }planets;
    J'obtiens ceci dans le débugueur :

    voir photo attachée.

    Donc LesPlanetes est la variables qui contient les deux structures.

    LesPlanetes contient Type, Nom, Km et tabLunes.

    J'aimerais savoir si tabLunes va reprendre TypeL, KmLune et Nom ?

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par beegees Voir le message
    En attendant, je vais aller voir les tutos de Emmanuel (Emmanuel, est-ce qu'une partie d'un de tes tuto est consacré au structure dynamique ?)
    L'article sur les listes chainées donne un bon exemple...

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    J'arrive pas à comprendre pourquoi t'ouvres deux topics pour le même problème http://www.developpez.net/forums/sho...d.php?t=448228 ???

Discussions similaires

  1. HashMap<int, String> m ; Donne une erreur.
    Par Pierre8r dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/09/2009, 17h21
  2. mon .htaccess me donne une erreur 500
    Par Dougui_bzh dans le forum OVH
    Réponses: 1
    Dernier message: 20/08/2008, 16h19
  3. [C#] download en boucle donne une erreur
    Par iamloco dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/10/2006, 04h07
  4. Réponses: 4
    Dernier message: 09/08/2006, 22h28
  5. [DAO VBA] Récupérer une erreur de violation de clé
    Par Caroline1 dans le forum Access
    Réponses: 5
    Dernier message: 28/04/2006, 17h39

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