Bonjour,
Je programme en C++ depuis pas mal de temps, mais je tombe sur un problème que je n'avais encore jamais vu. Pour être concret voici mon programme (cette version est inutile, mais elle est là uniquement pour reproduire l'erreur):
J'ai donc ici une classe Test, avec un constructeur qui alloue un tableau de 100 doubles. Le destructeur prend soin de libérer ce tableau lors de la destruction de l'objet.
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 using namespace std; #include <iostream> class Test { double *Vecteur; public: Test(void) { cout << "Construction et initialisation de Vecteur." << endl; Vecteur=new double[100]; for (int i=0;i<100;i++) Vecteur[i]=0.0; } ~Test(void) { cout << "Destruction de Vecteur." << endl; delete Vecteur; } }; int main(void) { Test *M; M=new Test[4]; // delete M; return 0; }
La fonction main quant à elle alloue un tableau de 4 objets Test. Lors de l'exécution, tout se passe comme prévu, on peut vérifier que le programme affiche 4 fois de suites la phrase "Construction et initialisation de Vecteur". Le problème survient lorsque je décommente la ligne "delete M" qui est cencée libérer le tableau de 4 objets. Le programme affiche une fois la phrase "Destruction de Vecteur", donc le destructeur est bien appelé lors de la libération du premier object. Mais le programme s'arrête là avec une erreur de segmentation.
Quelqu'un en connait-il la raison? Comment puis-je libérer mon tableau d'objets? Notez que mon programme est en fait beaucoup plus compliqué et que des tas d'opérations sont effectuées sur ce tableau d'objet sans problème. C'est uniquement lorsque je veux quitter proprement que ça plante.
Merci d'avance pour votre aide.
Partager