1 pièce(s) jointe(s)
Problème sur un destructeur
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:
Code:
1 2
| float* _tab;
_tab = new float(n); |
Logiquement le destructeur de la classe contient ceci:
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.
Voici un exemple minimaliste qui reproduit mon problème:
.h
Code:
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:
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;
} |
.cpp
Code:
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;
} |
J'utilise VC++ 2010 Express. Voici la fenêtre qui pop.
Pièce jointe 159470
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) :aie:
D'avance, merci pour votre aide!