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é :
merci d'avance
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;}
un débutant en C++ qui avait l'impression d'aimer ca jusqu'à ce programme
Partager