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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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;
}
.cpp
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;
}
J'utilise VC++ 2010 Express. Voici la fenêtre qui pop.
Nom : Sans titre.png
Affichages : 154
Taille : 31,4 Ko

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!