Bonsoir à tous,
Je ne comprends pas mon erreur... Comme je débute, je sollicite vos lumières.
J'ai une classe qui contient un tableau déclaré et initialisé comme suit:
Logiquement le destructeur de la classe contient ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 float* _tab; _tab = new float(n);
Et pourtant à l'utilisation j'ai une erreur. En effet, à l'utilisation de la classe j'utilise un vecteur (vector) de celle-ci. J'obtiens un crash du programme (la compilation ne pose pas de problème) à partir du deuxième push_back.
Code : Sélectionner tout - Visualiser dans une fenêtre à part delete[] _tab;
Voici un exemple minimaliste qui reproduit mon problème:
.h
.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #pragma once class C01 { public: C01(void); ~C01(void); protected: float* _tab; static int _n; };
.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include "C01.h" int C01::_n = 100; C01::C01(void) : _tab(0) { _tab = new float[_n]; } C01::~C01(void) { delete[] _tab; }
J'utilise VC++ 2010 Express. Voici la fenêtre qui pop.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "C01.h" #include <vector> using namespace std; int main() { vector<C01> lst; lst.push_back(C01()); lst.push_back(C01()); lst.push_back(C01()); return 0; }
Par ailleurs, je me suis rendu compte qu'en supprimant le contenu du destructeur, il n'y avait plus de crash. Cependant je ne suis pas sûr que ce soit une bonne chose. J'ai entendu parlé de risque de fuite de mémoire... (je débute)
D'avance, merci pour votre aide!
Partager