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 de segmentation pour des opérations de classe super basiques


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut Erreur de segmentation pour des opérations de classe super basiques
    Bonjour,

    je croyais que les Erreurs de segmentations, c'était pour les gens qui se trompaient dans les tailles des vecteurs, et je leur riais facilement au nez, jusqu'à ce qu'il m'arrive ceci :


    mon programme me renvoie des erreurs de segmentations qui sont tres dures à savoir d'ou elles viennent (c'etait pas francais, je le dis pour anticiper les remarques), puisque meme mon prof d'informatique n'a pas su (mais je lui ai presenté le programme version longue, et non la version isolée du probleme qui va suivre :


    Je cherche à définir une classe Mesh1d, qui décrit un intervalle de l'ensemble des réels découpés en un certain nombre d'intervalles. (il contient des infos sur les réels formant les bornes de l'intervalle (l0 et l1), sur le nombre de secteurs de découpage (N), sur l'emplacement des N+1 frontières (vecteur Mesh) et sur la taille des N secteurs (vecteur Sector).
    La methode MeshUnif découpe un Mesh1d donné en secteurs de taille égales.

    J'essaye ensuite de faire un programme simple, la compilation se passe très bien. Puis le programme s'éxécute dans son intégralité (il affiche jusqu'à la derniere ligne) et là bim, Segmentation fault.


    Ca fait plusieurs jours que je suis dessus (pas à temps plein ) et ce serait cool si quelqu'un pouvait m'aider ou au moins me dire dans quelle direction chercher une erreur. Je vous avoue que le coup de "le prof d'info ne peut pas m'aider" m'a un petit peu mis un coup au moral.


    Voilà le code par qui le scandale est arrivé :




    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <iostream>
    #include <fstream>
    #include <vector>
     
    using namespace std;
     
    //Quelques fonctions d'output des vecteurs : 
     
    void AffichCol(vector<double> a){
    int n=a.size();
    for(int i=0;i<n;i++)
    {cout<<a[i]<<endl;}}
     
     
     
    // Classe Mesh1D
     
     
    class Mesh1d{ 
    public : int N;
    	double l0;
    	double l1;
    	vector<double> Mesh; // N+1 points de maillage
    	vector<double> Sector; //Taille des n secteurs
     	void MeshUnif();
    	void SectorizeFromMesh();
         	void MeshizeFromSector();
    	void Afficher();
    	void resize(int n);
    Mesh1d(int n)
    	: N(n), Mesh(n+1), Sector(n) {}
    Mesh1d(int n, double l, double m)
    		: N(n), Mesh(n+1), Sector(n), l0(l), l1(m) {}
    };
     
    void Mesh1d::SectorizeFromMesh(){Sector.resize(Mesh.size()-1);
    for (int i=0;i<Sector.size();i++)
    {Sector[i]=Mesh[i+1]-Mesh[i];}
    }
     
    void Mesh1d::MeshizeFromSector(){Mesh.resize(Sector.size()+1);
    Mesh[0]=l0;
    for (int i=1;i<Mesh.size();i++)
    {Mesh[i]=Mesh[i-1]+Sector[i];}
    }
     
    void Mesh1d::Afficher()
    {AffichCol(Sector);}
     
    void Mesh1d::MeshUnif() {
    for(int i = 0; i<=N+1; i++){Mesh[i]=(l1-l0)*double(i)/N+l0;}
    SectorizeFromMesh();
    }
     
    void Mesh1d::resize(int n)
    {N=n;
    Sector.resize(n);
    Mesh.resize(n+1);}
     
     
    // FIN de la classe Mesh1D
     
     
     
     
     
    int main()
    {
    cout<<"*******Petits tests sur Mesh1d*********"<<endl;
    Mesh1d filet(10,0,1);
    filet.MeshUnif();
    filet.Afficher();
     
     
    return 0;}
    merci d'avance


    un débutant en C++ qui avait l'impression d'aimer ca jusqu'à ce programme

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu devrais utiliser un débogueur. Il t'aurait tout de suite montré que ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i = 0; i<=N+1; i++)
    Aurait dû être ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i = 0; i<N+1; i++)

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut
    ouah la honte

    bon ben apparemment, à mon niveau, les Erreurs de segmentation concernent toujours en priorité les gens qui se trompent dans les tailles des tableaux...

    Merci pour cette réponse ultrarapide (je suis sur que tu l'as vu plus vite que le debuggeur )

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

Discussions similaires

  1. erreur de segmentation avec des threads
    Par momoski89 dans le forum C
    Réponses: 2
    Dernier message: 07/05/2013, 16h17
  2. erreur de compilation pour des sous rapports
    Par flamant dans le forum Jasper
    Réponses: 1
    Dernier message: 14/05/2012, 15h30
  3. Réponses: 1
    Dernier message: 04/07/2011, 12h30
  4. Réponses: 1
    Dernier message: 25/06/2011, 22h14
  5. algorithmes pour des opérations basiques
    Par nemesisTHEone dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 29/09/2009, 04h24

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