OVH Cloud OVH Cloud

Problème avec un destructeur

3 réponses
Avatar
Bruno.Barral
Bonjour,

J'ai développé une application en VC++ 6.0 avec les MFC sous Windows ME,
mais qui fonctionne sous n'importe quel Windows 9x et supérieurs.

J'ai créé les classes suivantes :

class TheOff
{
public :
CString OName;
};

class TheDem
{
public :
CString DName;
};



class Sav
{
public :
long IDSav;
CString name;
TheOff lof;
TheDem led;
};

Pour créer un objet Sav, je fais :

mysav = new Sav;

Pour détruire un objet Sav, je fais :

delete mysav;

(Je n'ai pas défini de destructeur à moi dans la classe Sav).

Or, dans une fonction où je détruis beaucoup d'objets de type Sav, j'ai un
plantage avec le message suivant :

Sav::`scalar deleting destructor'(unsigned int 1) + 37 bytes

Et je ne comprends pas le sens de ce message ...

Quelqu'un a une idée ?

Merci !

3 réponses

Avatar
Ambassadeur Kosh
attention :

Sav *sav = new Sav() ;
...
delete sav ;

et

Sav *savs = new Sav[30] ;
...
delete [] savs ;

(c'est le scalar qui me fait penser à ça)

et par securité, ajouter un constructeur par défaut et un destructeur dans
TheOff et TheDem.
conaissant "VC++ 6.0", je me méfierais et ne compterais pas trop sur ses
aptitudes à faire ça tout seul.

genre :
class TheOff
{
public :
TheOff() {}
~TheOff() {}

CString OName;
};

class TheDem
{
public :

TheDem() {}
~TheDem() {}
CString DName;
};
Avatar
adebaene
"Bruno.Barral" ***adoo.fr> wrote in message news:<bvjhfi$kt0$...
Bonjour,

J'ai développé une application en VC++ 6.0 avec les MFC sous Windows ME,
mais qui fonctionne sous n'importe quel Windows 9x et supérieurs.

J'ai créé les classes suivantes :

class TheOff
{
public :
CString OName;
};

class TheDem
{
public :
CString DName;
};



class Sav
{
public :
long IDSav;
CString name;
TheOff lof;
TheDem led;
};

Pour créer un objet Sav, je fais :

mysav = new Sav;

Pour détruire un objet Sav, je fais :

delete mysav;



Est-ce bien nécessaire dans ton cas de faire une allocation dynamique.
Tu ne pourrais pas créer directement l'objet sur la pile ?
Sav mysav;

Or, dans une fonction où je détruis beaucoup d'objets de type Sav, j'ai un
plantage avec le message suivant :

Sav::`scalar deleting destructor'(unsigned int 1) + 37 bytes

Et je ne comprends pas le sens de ce message ...


Montres nous le code de la fonction en question.

Arnaud
Avatar
Bruno.Barral
Bonjour,

Merci pour les réponses.
J'ai réglé le problème : cela venait du fait que je supprimais (avec delete)
un objet qui n'existait plus ... Un grand classique, quoi ! :-)



--
--------------------
"Pour une fusillade qui est mortelle, il y en a environ trois sans mort
d'homme. Et, mes amis, cela est inacceptable en Amérique. C'est totalement
inacceptable. Et nous devons agir."-Georges W. Bush - Philadelphie, Mai 14,
2001
"Arnaud Debaene" a écrit dans le message news:

"Bruno.Barral" ***adoo.fr> wrote in message


news:<bvjhfi$kt0$...
> Bonjour,
>
> J'ai développé une application en VC++ 6.0 avec les MFC sous Windows ME,
> mais qui fonctionne sous n'importe quel Windows 9x et supérieurs.
>
> J'ai créé les classes suivantes :
>
> class TheOff
> {
> public :
> CString OName;
> };
>
> class TheDem
> {
> public :
> CString DName;
> };
>
>
>
> class Sav
> {
> public :
> long IDSav;
> CString name;
> TheOff lof;
> TheDem led;
> };
>
> Pour créer un objet Sav, je fais :
>
> mysav = new Sav;
>
> Pour détruire un objet Sav, je fais :
>
> delete mysav;

Est-ce bien nécessaire dans ton cas de faire une allocation dynamique.
Tu ne pourrais pas créer directement l'objet sur la pile ?
Sav mysav;

> Or, dans une fonction où je détruis beaucoup d'objets de type Sav, j'ai


un
> plantage avec le message suivant :
>
> Sav::`scalar deleting destructor'(unsigned int 1) + 37 bytes
>
> Et je ne comprends pas le sens de ce message ...
Montres nous le code de la fonction en question.

Arnaud