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 :

struc undeclared (first use in this function)


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut struc undeclared (first use in this function)
    Bonjour,
    en compilant mon code j'ai cette erreur : ‘newnomine’ undeclared (first use in this function)

    Je bloque sur ca depuis 5 heures deja

    voici mon 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
    46
    47
    48
    49
    50
     
    typedef struct 
    {
    	int price_date ;
    	int domaine ; 
    	char nom[50];
    	int jour_naissance ;
    	int mois_naissance ;
    	int annee_naissance;
    	char nationalite[30];
    	char genre[1];
    } Nomine_s ;
     
    Nomine_s tab[MAXTAB] ;
     
     
    int ConstruireTableaux(Nomine_s *tab)
    {
    	char f[15] ,str[100] ;
    	char **tokens ; 
    	FILE *fp ;
    	int i , c , n ; 
    	printf("tapez le nom du fichier \n") ; 
    	fgets(f,15,stdin) ;
    	fp = fopen(f,"r") ;
    	while((c = fgetc(fp)) != EOF) 
    	{
    		if(c == '\n')
    		{
    			n++ ;
    			tokens = str_split(fgets (str, 100, fp), ',') ;
    			if (tokens)
    			{
    					Nomine_s newnomine; 
    					newnomine.price_date = atoi(*(tokens)) ;
    					newnomine.domaine = atoi(*(tokens)+1) ;
    					strcpy(newnomine.nom , *(tokens)+2) ;
    					newnomine.jour_naissance = atoi(*(tokens)+3) ;
    					newnomine.mois_naissance = atoi(*(tokens)+4) ;
    					newnomine.annee_naissance = atoi(*(tokens)+5) ;
    					strcpy(newnomine.nationalite , *(tokens)+6 );
    					strcpy(newnomine.genre, *(tokens)+7) ;
     
    			}
    			tab[n-1] = newnomine;
     
    		}
    	}
    	return n ;
    }
    Merci d'avance

  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 et bienvenue,

    C'est normal : newnomine est une variable locale. Tu la déclares à l'intérieur du bloc ouvert par « if (tokens) { ». Dès que tu quittes ce bloc, elle cesse d'exister et l'espace qu'elle occupe dans la pile est libéré.

    La ligne qui pose problème est donc la ligne 45 puisqu'elle se réfère à ta variable en dehors de ce bloc. Dans le cas présent, tu peux la mettre à l'intérieur (à la fin) car tu as instancié un vrai tableau et que ta variable peut être copiée directement dedans. Par contre, si tu fonctionnais par référence en utilisant des pointeurs, tu aurais vraisemblablement des problèmes puisque tu te référerais a posteriori à une instance qui n'existerait plus.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta reponse Obsidian ! probleme resolu !

  4. #4
    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
    À ton service mais, dans ce cas, n'oublie pas le bouton « résolu » en bas de page (je l'ai fait pour toi cette fois-ci).

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    LOl desolais je suis pas un habitue des forums, la prochaine je l'oublierai pas
    ca veut dire quoi erreur de segmentation ? c'est quand j'execute .

  6. #6
    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
    Citation Envoyé par Malcolm98 Voir le message
    ca veut dire quoi erreur de segmentation ? c'est quand j'execute .
    Réponse courte : ça veut dire que ton programme plante.

    Réponse longue : fais une recherche sur le forum car c'est l'erreur la plus fréquemment rencontrée lorsque l'on programme en C/C++. Elle signifie que ton programme a essayé d'écrire en dehors du segment de mémoire alloué par ton système d'exploitation au processus de ton programme. Si tu faisais tourner cela sur un micro-processeur non équipé d'un mode protégé (ce qui était pour ainsi dire toujours le cas jusqu'au milieu des années 1990), ton programme irait écraser sans contrôle ce qui se trouve dans la mémoire : les autres processus, mais aussi les données ou le système d'exploitation lui-même.

    C'est dû au fait que le C est fait pour produire des exécutables en langages machine et se situe « un cran au dessus de l'assembleur ». Il appartient donc encore au programmeur de vérifier qu'il ne dépasse pas la longueur de ses tableaux (le C se contente de multiplier l'index par la taille d'un élément : rien ne l'empêche de dépasser les limites), de s'assurer que ses pointeurs ont correctement été initialisés et qu'ils sont toujours valides au moment où on les utilise, et de bien vérifier que l'on ne fait plus référence l'instance d'une variable qui a été préalablement libérée, que ce soit implicitement (fin d'un bloc pour une variable locale) ou explicitement (malloc() et free()).

    À noter que ce message t'est renvoyé par le système d'exploitation, qui t'informe qu'il a mis fin à ton programme parce qu'il ne savait visiblement plus ce qu'il faisait. Ce n'est pas un message de l'application elle-même ni des bibliothèques qu'elle utilise.

    Comme le nombre de points qui peuvent poser problème dans ton code sont assez nombreux, il va falloir que tu utilises le debugger de ta suite de développement pour savoir à quelle ligne le problème se trouve. Si tu es sous Linux et que tu compiles avec GCC, par exemple, ton debugger sera « gdb ».

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour ta réponse Obsidian, j'ai
    résolu le probleme , j'ai du faire nuit blanche pour ca lol mais au moins c'est fait.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. T_ADDR undeclared (first use in this function)
    Par Kaamui dans le forum Débuter
    Réponses: 3
    Dernier message: 17/02/2012, 13h31
  2. [Lex/Yacc] Example5.l:8: error: 'yylval' undeclared (first use in this function)
    Par scls19fr dans le forum Générateurs de compilateur
    Réponses: 2
    Dernier message: 20/06/2009, 14h52
  3. libpcap PB undeclared (first use in this function)
    Par guiyomh dans le forum Bibliothèque standard
    Réponses: 3
    Dernier message: 07/06/2008, 15h43
  4. error: `new' undeclared (first use in this function)
    Par moon93 dans le forum Réseau
    Réponses: 14
    Dernier message: 11/07/2006, 16h57
  5. Réponses: 23
    Dernier message: 19/01/2006, 23h34

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