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 :

Comparaison pointeur entier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut Comparaison pointeur entier
    Bonjour,

    J'ai un projet de communication entre une interface, un administrateur et plusieurs machines a effectuer.

    Deux soucis se présentent.

    D'abord quand je compile, le warning suivant :
    "warning: comparison between pointer and integer"

    Qui se dirige vers la bout de code suivant :

    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
      while((entree = readdir(rep)) != NULL) //Tant qu'il reste quelque chose a lire
        {
          if (strncmp(entree->d_name, ".", 1) == 0)
    	continue;
     
          if (entree->d_name == DT_REG || entree->d_type == DT_DIR) // Ne lire que les fichiers et les repertoires
     
    	{
    	  *length = *length + strlen(entree->d_name) +1; // Modifie la taille des donnees
    	  newcontenu = realloc(contenu, *length); //Reallocation memoire
    	  if (newcontenu == NULL)
    	    {
    	      perror("realloc"); // Si erreur dans realloc
    	      *length = 0;
    	      return NULL;
    	    }
     
          char *retval;
          retval = NULL;
          contenu = newcontenu;
          strncat(contenu, entree->d_name, NAME_MAX); // Ajoute le nom
          strcat(retval,"\n"); // Ajoute le retour a la ligne
    	}
        }
    C'est un bout d'une fonction fournie par les profs, et je n'en comprends pas tous les éléments !

    Deuxieme souci, j'ai un superbe sgmentation fault qui me poursuit des que j'execute mon programme.
    J'ai beau rajouter des malloc partout ou j'avais pu les oublier, il persiste !

    J'espere que ce probleme est lié au premier, et que vous pourrez m'aider !

    Merci beaucoup !

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Il manque la déclaration des différentes variables.
    Poste un code minimal mais compilable qui reproduit l'erreur, s'il te plait.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    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 kathlyn222 Voir le message
    D'abord quand je compile, le warning suivant :
    "warning: comparison between pointer and integer"

    Qui se dirige vers la bout de code suivant :

    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
      while((entree = readdir(rep)) != NULL) //Tant qu'il reste quelque chose a lire
        {
    /* -ed- les entrées de fichiers commençant par "." sont ignores */
          if (strncmp(entree->d_name, ".", 1) == 0)
    	continue;
     
    /* -ed- c'est probablement ici qu'il y a l'avertissement. 
     
    entree->d_name == DT_REG
     
    n'a aucun sens. DT_REG n'est pas un pointeur. 
    Le bon code est probablement : 
     
    entree->d_type == DT_REG
     
    */
          if (entree->d_name == DT_REG || entree->d_type == DT_DIR) // Ne lire que les fichiers et les repertoires
     
    	{
    	  *length = *length + strlen(entree->d_name) +1; // Modifie la taille des donnees
    	  newcontenu = realloc(contenu, *length); //Reallocation memoire
    	  if (newcontenu == NULL)
    	    {
    	      perror("realloc"); // Si erreur dans realloc
    	      *length = 0;
    	      return NULL;
    	    }
     
          char *retval;
          retval = NULL;
          contenu = newcontenu;
          strncat(contenu, entree->d_name, NAME_MAX); // Ajoute le nom
          strcat(retval,"\n"); // Ajoute le retour a la ligne
     
    /* -ed- ce dernier bloc d'instruction n'a aucun sens. 
       Si retval vaut NULL, son usage dans strncat() provoque un 
       comportement indéfini.
    */
    	}
        }
    C'est un bout d'une fonction fournie par les profs,
    Si c'est vrai, change d'école, et vite...
    et je n'en comprends pas tous les éléments !
    J'ai ajouté quelques commentaires... (-ed-)

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut warning reglé
    Merci pour ton aide Medinoc, avec la correction de cette erreur (j'espere erreur de frappe de la part du prof), le warning n'apparait plus.

    Quant au segmentation faults, il doit venir de bien plus loin...
    Je continue de chercher !

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Rendons à César ce qui appartient à César: C'est Emmanuel qui a corrigé l'erreur, pas moi...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    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 kathlyn222 Voir le message
    Quant au segmentation faults, il doit venir de bien plus loin...
    Je continue de chercher !
    Je l'ai déjà indiqué. retval pointe sur NULL. Si tu écris en NULL, le comportement est indéfini.

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut
    Excuse-moi pour l'erreur, merci Emmanuel !

    Et pour retval = NULL, j'ai reglé le problème en le définissant autrement.

    Le segmentation fault doit venir d'une autre fonction, mais j'ai l'impression de chercher une aiguille dans une botte de foin.

    Je suppose que cela doit venir d'un malloc oublié ou autre erreur de ce type, mais je ne la vois pas !

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par kathlyn222 Voir le message
    Excuse-moi pour l'erreur, merci Emmanuel !

    Et pour retval = NULL, j'ai reglé le problème en le définissant autrement.
    Que veux-tu dire par "en le définissant autrement" ?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. [Débutant] comparaison deux entiers
    Par saminahoul dans le forum C#
    Réponses: 8
    Dernier message: 05/01/2013, 19h29
  2. Comparaison d'entiers louche
    Par MrWink dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 15/11/2010, 08h35
  3. cast : pointeur , entier
    Par gipfel11 dans le forum C
    Réponses: 2
    Dernier message: 13/03/2008, 14h20
  4. GTK+ comparaison entier valeur du pointeur
    Par Emyleet dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 21/07/2006, 15h28
  5. Réponses: 3
    Dernier message: 22/09/2005, 10h34

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