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 :

[ERREUR D'EXECUTION] Segmentation Fault


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [RESOLU][ERREUR D'EXECUTION] Segmentation Fault
    Bonjour,

    J'ai un "Segmentation Fault" dans mon appli.
    Il sagit de ma première appli C++(du moins, la première qui ne soit pas un Hello World ou dérivé ).

    Voici le bout de code sur lequel l'erreur apparaît:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	// On charge la map mémoire
    	string mem_str;
    	mem_str.reserve(64*1024);
     
    	// Chargé depuis l'entrée standard
    		while(mem_str.length()<64*1024)
    		{
     
    			std::cin >> mem_str;
    		}
    L'erreur apparaîtrait dans la condition du while, après que celle-ci est bouclée une fois.

    Petite explication du contexte:
    L'appli doit recevoir sur l'entrée des données binaires(une image de mémoire pour microcontroleur 68HC pour être exacte). Ainsi, je lance mon prog de cette façon: "$ cat MaMemoire.bin | monprog"
    Et la, monprog doit charger dans un tableau de char[64*1024] le contenu reçu sur l'entrée standard. Dans le bout de code, il commence par mettre le contenu de l'entrée standard dans une string, et reboucle jusqu'à ce que les 64*1024 octets soient reçu.

    Je n'ai ici envoyé que ce que j'ai jugé utile pour le problème. Si il faut plus d'infos, ou plus de code(ou la totalité du code), je peux le mettre aussi.

    Pour des détails, je programme sous Gentoo Linux, avec KDevelop 3.2.1, en c++. GCC 3.4.4.

    Quelqu'un saurait d'où cela vient?
    Merci d'avance .[/code]

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Petit supplèment d'information:

    C'est dés que la condition du while devient vrai.
    Lorsque le fichier d'entrée fait 64ko moins 1 octet, la boucle s'execute en attendant un dernière octet. Lorsque je change la condition en mem_str.length()<64*1024-1, de nouveau segmentation fault.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon, en faite, le bout de code fonctionne. J'avais du mal placer mes code de "debug".

    Le bug se situe après en faite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	int i;
    	for(i=0;i<64*1024;i++)
    	{
    		std::cout << i << endl;
    		mem[i]=mem_str.c_str()[i];
    		std::cout << i << endl;
    	} 
    	std::cout << "toto";
    Lorsque i devient égal à 64*1024, j'ai un segmentation fault dans la condition du for.
    65534
    65534
    65535
    65535
    Segmentation fault
    Il n'arrive jamais à toto, mais il faisait de même pour le premier code au début. Je me demande si le bug ne peut pas se situer après, mais que le plantage de l'appli intervienne avant que le flux ne soit entièrement traité et envoyé en sortie?
    Lorsque je change le "64*1024" par "1*1024", le problème est le même. A mon grand étonement.

    Re-merci d'avance pour votre aide, et désolé à ceux qui se sont penchés sur le premier poste pour leur perte de temps.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon, ce bout de code là est encore saint.

    En faite, il y avait aussi un bug dans mon code de debug .
    Le std::cout << "toto"; ne s'affichait pas car il attendait le endl(pour envoyer les lignes en un bloque sans doute?)
    Bon, maintenant je peux reprendre par mes propres moyens, je passe ce topic en résolu. Désolé pour ceux qui auraient perdu du temps avec ce topic.

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

Discussions similaires

  1. erreurs de compilation + segmentation fault
    Par gbauby dans le forum Débuter
    Réponses: 11
    Dernier message: 25/04/2012, 21h52
  2. une erreur du type Segmentation fault
    Par bae84 dans le forum Débuter
    Réponses: 8
    Dernier message: 16/12/2011, 16h34
  3. Réponses: 2
    Dernier message: 31/12/2009, 12h02
  4. probleme d'execution :segmentation fault
    Par chochatown dans le forum C++
    Réponses: 1
    Dernier message: 11/06/2009, 19h43
  5. Réponses: 2
    Dernier message: 15/01/2008, 12h09

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