Bonjour,
Voilà, je dois créer une classe Etudiant permettant d'y enregistrer son matricule,le nombre de cours qu'il suit, ainsi que les notes relatives à chacun des cours( dans un vecteur créé dynamiquement). Ainsi que des méthodes qui permettront d'y accéder. Je dois utiliser les types de données abstraits.
Voilà mes différents fichiers :
Mon hpp:Mon cpp Etudiant:
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 class Etudiant { public: double moyenneNotes() ; int obtenirMatricule() ; int obtenirNombreCours() ; int obtenirNote(int numCours); Etudiant (); Etudiant (int mat,int nombreCoursSuivis,int V[]); Etudiant& operator/=(const Etudiant &); ~Etudiant(); private: int matricule; int nombreCours; int *vecteur; };Mon main:
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 #include "etudiant.hpp" Etudiant::Etudiant() { matricule=0; nombreCours=0; vecteur=0; } Etudiant::Etudiant(int mat,int nombreCoursSuivis,int V[]) { matricule=mat; nombreCours=nombreCoursSuivis; vecteur=new int[nombreCours]; for (int i=0;i<nombreCours;++i) vecteur[i]=V[i]; } int Etudiant::obtenirMatricule() { return matricule; } int Etudiant::obtenirNote(int numCours) { return vecteur[numCours-1]; } int Etudiant::obtenirNombreCours() { return nombreCours; } double Etudiant::moyenneNotes() { double somme=0; for (int i=0;i<nombreCours;i++) somme+=vecteur[i]; return (somme/nombreCours); } Etudiant& Etudiant::operator/=(const Etudiant &e) { if(&e!=this) { matricule=e.matricule; nombreCours=e.nombreCours; for (int i=0;i<nombreCours;++i) vecteur[i]=e.vecteur[i]; } return (*this); } Etudiant::~Etudiant() { delete[] vecteur; }Je n'ai pas de problème à la compilation mais à l'exécution , j'obtiens ce message d'erreur :
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 #include <iostream> #include "etudiant.hpp" using namespace std; int main() { int matriculeX=3526,nbreCoursX=5,numCours=2; int V[5]={8,6,10,12,8}; Etudiant x(matriculeX,nbreCoursX,V); cout<< x.obtenirNote(numCours)<<endl; cout<< x.moyenneNotes()<<endl; Etudiant y; y=x; cout << y.moyenneNotes() << endl; cout << y.obtenirNote(4) << endl; return 0; }Ce message n'apparait que lorsque j'ajoute un destructeur comme c'est le cas dans les codes plus hauts! Lorsque que je ne mets pas de destructeur je n'ai pas ce message. Donc j'ai du oublier quelque chose là dedans.
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 *** glibc detected *** ./dev.exe: double free or corruption (fasttop): 0x09824008 *** ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6[0xb7e84454] /lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7e864b6] /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb80620b1] /usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0xb806210d] ./dev.exe[0x80488ea] ./dev.exe[0x8048b8d] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7e2b685] ./dev.exe[0x8048701] ======= Memory map: ======== 08048000-08049000 r-xp 00000000 08:01 3153998 /home/aurelien/Bureau/ProjetsINFO/dev.exe 08049000-0804a000 r--p 00000000 08:01 3153998 /home/aurelien/Bureau/ProjetsINFO/dev.exe 0804a000-0804b000 rw-p 00001000 08:01 3153998 /home/aurelien/Bureau/ProjetsINFO/dev.exe 09824000-09845000 rw-p 09824000 00:00 0 [heap] b7d00000-b7d21000 rw-p b7d00000 00:00 0 b7d21000-b7e00000 ---p b7d21000 00:00 0 b7e14000-b7e15000 rw-p b7e14000 00:00 0 b7e15000-b7f6d000 r-xp 00000000 08:01 12763218 /lib/tls/i686/cmov/libc-2.8.90.so b7f6d000-b7f6f000 r--p 00158000 08:01 12763218 /lib/tls/i686/cmov/libc-2.8.90.so b7f6f000-b7f70000 rw-p 0015a000 08:01 12763218 /lib/tls/i686/cmov/libc-2.8.90.so b7f70000-b7f73000 rw-p b7f70000 00:00 0 b7f73000-b7f80000 r-xp 00000000 08:01 12746773 /lib/libgcc_s.so.1 b7f80000-b7f81000 r--p 0000c000 08:01 12746773 /lib/libgcc_s.so.1 b7f81000-b7f82000 rw-p 0000d000 08:01 12746773 /lib/libgcc_s.so.1 b7f82000-b7f83000 rw-p b7f82000 00:00 0 b7f83000-b7fa7000 r-xp 00000000 08:01 12763224 /lib/tls/i686/cmov/libm-2.8.90.so b7fa7000-b7fa8000 r--p 00023000 08:01 12763224 /lib/tls/i686/cmov/libm-2.8.90.so b7fa8000-b7fa9000 rw-p 00024000 08:01 12763224 /lib/tls/i686/cmov/libm-2.8.90.so b7fa9000-b808c000 r-xp 00000000 08:01 7577942 /usr/lib/libstdc++.so.6.0.10 b808c000-b8090000 r--p 000e3000 08:01 7577942 /usr/lib/libstdc++.so.6.0.10 b8090000-b8091000 rw-p 000e7000 08:01 7577942 /usr/lib/libstdc++.so.6.0.10 b8091000-b8097000 rw-p b8091000 00:00 0 b80a7000-b80aa000 rw-p b80a7000 00:00 0 b80aa000-b80c4000 r-xp 00000000 08:01 12746771 /lib/ld-2.8.90.so b80c4000-b80c5000 r-xp b80c4000 00:00 0 [vdso] b80c5000-b80c6000 r--p 0001a000 08:01 12746771 /lib/ld-2.8.90.so b80c6000-b80c7000 rw-p 0001b000 08:01 12746771 /lib/ld-2.8.90.so bffb2000-bffc7000 rw-p bffeb000 00:00 0 [stack] Abandon
Des idées ??
Merci!
Partager