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 erreur pas comprise en c


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut Problème erreur pas comprise en c
    Bonjour, je me casse la tête sur ce programme. Je comprends pas où est le problème
    J'ai une erreur windows quand je démarre le programme, mais sans erreur à la compilation

    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
     
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #define TAILLE_UN_FICHIER 4095
    #include "adresses.h"
    #include "repertoire.h"
     
    int main(int argc, char *argv[])
    {
     
    	int i;
    	char dossier[strlen(argv[0])]; // taille dossier dans lequel on est lors du lancement du prog
    	int nbr_fichier = 0;
     
     
    	struct fichier *courant, *fin;//debut ou courant
    	fin = NULL;
    	(*courant).suivant = fin;
     
    	/* FIN DECLARATIONS */
    	for (i=0; i < argc; i++)
    	{
    		printf("Argument %li : %s \n", i+1, argv[i]);
    	}
    	/* FIN AFFICHAGE CONTEXTE */
    	strcpy(dossier,argv[0]);
    	get_dossier(dossier);//on envoi le pointeur, retourne le dossier d'execution de l'exe
    	printf("Dossier %s",dossier);
     
     
     
    	get_files_in_folder(dossier,&courant);
     
    	return 0;
    }
    et le fichier où est la fonction

    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
    51
    
    #include <sys/types.h>
    #include <dirent.h>
    struct fichier
    {
    	char adresse[TAILLE_UN_FICHIER];
    	struct fichier *suivant;
    	
    	
    };
    
    get_files_in_folder(char folder[],struct fichier ** courant)
    {
    	 
    	
    	struct dirent *lecture;
    	struct fichier *temp;
    	
    	/*Le dossier que l'on explore */
    	DIR *rep;
    
    	/* On ouvre le dossier */
    	rep = opendir(folder);
    	
    	
     
       int num_fichier;
       num_fichier=0;
    	   while ((lecture = readdir(rep)))
    	   {
    		   
    	     
    		
    	     //1) On rempli la valeur de courant
    	    system("pause");
    	     strcpy((**courant).adresse,(*lecture).d_name);
    	     printf("%s\n",(**courant).adresse); 
    	     system("pause");
    	     //2) On prépare un nouveau courant
    	     temp =(struct fichier*) malloc(sizeof(struct fichier));//on crée un emplacement en mémoire
    	    (*temp).suivant = *courant; // on dit que temp pointe vers courant (pas le pointeur du pointeur, le pointeur)
    	    *courant = temp; //le pointeur de pointeur courant va maintenant pointer sur l'adresse de temp
    	     free(temp);
    		  
    	   }
    	   /* Fermeture du dossier */
    	   closedir(rep);
    	  
    
    }
    Si vous pouviez me dire d'où vient l'erreur, je me casse un peu la tête sur les pointeurs et les structures là. J'suis un peu novice en C. J'ai mis en gras les endroits où je pense que ça plante, mais je vois pas pourquoi...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut
    J'ai essayé plus simple, suivant un exemple sur le net, mais toujours cette erreur :s

    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
    #include <sys/types.h>
    #include <dirent.h>
    struct fichier
    {
    	char adresse[TAILLE_UN_FICHIER];
    	struct fichier *suivant;
     
     
    };
    /*struct fichier * */
    void ajout_fichier(struct fichier **courant,char adresse_recu[TAILLE_UN_FICHIER])
    {
    	struct fichier *temp = (struct fichier*) malloc(sizeof(struct fichier));
    	strcpy((*temp).adresse,adresse_recu);
    	(*temp).suivant = *courant ;
    	 printf("%s\n",(*temp).adresse); 
    	*courant = temp;
     
     
    }
    void get_files_in_folder(char folder[],struct fichier ** courant)
    {
     
    	struct dirent *lecture;
     
     
    	/*Le dossier que l'on explore */
    	DIR *rep;
     
    	/* On ouvre le dossier */
    	rep = opendir(folder);
     
     
     
    	   while ((lecture = readdir(rep)))
    	   {
     
    		ajout_fichier(courant,(*lecture).d_name);
     
    		    // num_fichier ++;
    	   }
    	   /* Fermeture du dossier */
    	   closedir(rep);
    	  // return courant;
     
    }
    Merci d'avance pour votre aide

  3. #3
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            struct fichier *courant, *fin;//debut ou courant
    	fin = NULL;
    	(*courant).suivant = fin;
    peut pas marcher ca, utilisation d un pointeur non alloué.
    Pour le second code, ca compile pas chez moi.

    [edit] si tu compiles avec gcc, il est mal configuré (en C++, alros que c est du C ce que je vois).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut
    en fait après de multiples test, je me suis rendu compte que c'était parce que je n'allouais pas de mémoire à ma structure. Je pensais que cela le faisait, mais non apparemment, c'est peut être parce qu'elle était pointée.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut
    Citation Envoyé par BainE Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            struct fichier *courant, *fin;//debut ou courant
    	fin = NULL;
    	(*courant).suivant = fin;
    peut pas marcher ca, utilisation d un pointeur non alloué.
    Pour le second code, ca compile pas chez moi.

    [edit] si tu compiles avec gcc, il est mal configuré (en C++, alros que c est du C ce que je vois).
    J'utilise mingw, mais en fait c'est bon ça marche merci, j'ai juste rajouté un malloc (à force de tout mettre en commentaire pour voir où ça marchait pas).

    Et oui, ça doit être parce que ct une structure pointée. J'ai un peu de mal avec les pointeurs. Merci en tout cas.

    Et pour le deuxième je l'avais pas mis en entier, pour ça que ça compile pas.

  6. #6
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Re,

    pour les pointeurs, y a pas de secrets c'est cours+pratique pour les maitriser.

    Par contre verifie les settings du compilo, je pense qu'il est reglé pour compiler en C++ et pas en C, y a pas mal de warning a corriger (des warnings importants !)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut
    ah oki... Je vais regarder cela. Oui, cours et pratique lol.

    Merci en tout cas.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par BainE Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            struct fichier *courant, *fin;//debut ou courant
    	fin = NULL;
    	(*courant).suivant = fin;
    peut pas marcher ca, utilisation d un pointeur non alloué.
    Hum, ce pointeur est tout à fait alloué, par contre, il pointe sur une zone invalide (NULL). Son utilisation entraine donc un comportement indéfini.

    Le P.O. a déclaré avoir du mal avec les pointeurs. Essayons de ne pas l'embrouiller avec du vocabulaire approximatif...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/05/2009, 22h54
  2. ERREUR PAS COMPRISE
    Par realkilla dans le forum ASP
    Réponses: 4
    Dernier message: 22/07/2008, 22h22
  3. [syntaxe] erreur de compilation pas comprise
    Par mamelouk dans le forum C++
    Réponses: 20
    Dernier message: 20/08/2007, 11h44
  4. [LOG4J][PROPERTIES] Erreur pas comprise?
    Par fabszn dans le forum Logging
    Réponses: 5
    Dernier message: 04/01/2006, 18h09
  5. erreur que j ai pas comprise ds mon pg informix
    Par zineb dans le forum Informix
    Réponses: 2
    Dernier message: 16/07/2003, 13h53

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