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 :

while getline segmentation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Par défaut while getline segmentation
    Bonjour,
    pour mon boulot, j'aimerai modifier un programme dont j'ai le code pour l'inclure comme second programme d'un pipeline de six programmes.
    A un moment du code, le programme va lire l'input file avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    getline(input, st);
    while(getline(input st)){
    /*traitement de l'input*/
    }
    Débutant le C++ pour cette cause là, je comprends que getline va traiter ligne par ligne cet input jusqu'à la fin du fichier. Lorsque le programme estimera que le fichier est terminé, la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(getline(input st))
    ne devrait plus être respectée, ce qui devrait interrompre le traitement de l'input (si j'ai bien compris la logique).
    Or, cet input (un tableau de dimensions connues) sera généré progressivement par le premier programme (en amont donc), qui travail plus lentement.
    Donc, je pense que ça risque de causer des soucis avec ce car la boucle risque d'interpréter le "front de remplissage" de mon input qui se rempli petit à petit comme étant une EOF.

    Je pense que la solution serait de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    getline(input, st);
    while(getline()){
    /*traitement*/
    }
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int rowCount(0), nrow(50); #un cas où l'input aurait 50 lignes
    getline(input, st);
    while(rowCount<nrow){
    /*traitement*/
    rowCount++;
    }
    J'ai essayé, j'ai compilé avec succés mais en lançant le programme j'ai une erreur de segmentation.

    Est-ce que vous voyez le problème ?
    myca

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Quel est ton environnement de travail? Ce serait pas mal d'essayer de localiser la source de l'erreur, par exemple par du pas à pas (debugger), ou alors avec un instrument comme valgrind (sous *nix)

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    Par défaut
    On a des erreurs de segmentations quand on accède à une partie de la mémoire qu'on ne devrait pas accéder.
    Il faudrait nous montrer le traitement que tu effectues.

    Dans ton traitement, il faudrait que tu fasse avant de commencer le traitement de faire des getline en boucle tant qu'il n'y a rien à lire et à chaque fois, de repositionner ton curseur dans le fichier.
    (ceci évitera d'avoir des valeurs fausses)

    Pour la communication en deux programmes je te conseillerais plutôt d'utiliser une socket.

Discussions similaires

  1. Instruction Getline dans une boucle while
    Par jamsgoodon dans le forum Débuter
    Réponses: 4
    Dernier message: 31/01/2011, 18h01
  2. Réponses: 3
    Dernier message: 25/11/2002, 14h15
  3. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  4. [TASM] Déclarer le segment de pile
    Par cipher dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 01/10/2002, 03h58
  5. angle entre 2 segments
    Par tane dans le forum Mathématiques
    Réponses: 4
    Dernier message: 25/09/2002, 16h47

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