Avatar billede strickie Nybegynder
11. marts 2002 - 10:24 Der er 7 kommentarer og
1 løsning

Destructor, Hvor meget gør den?

Hejsa alle i C++ guruer.

Hvor meget rydder default destrctorer'en selv op?

Jeg har en class XMLParser som indeholder et pointer til en class XMLHandler.

Når jeg kalder delete på min XMLParser pointer og eftefølgende kalder delete på min XMLHandler pointer får jeg at vide at jeg har deallokeret det samme hukommelse flere gange. Det kan være der skal lidt kode for at illustrerer problemet:

//The XML Parser and Handler are created
XMLParser *xpaParser = new XMLParser();
XMLHandlerWriteMenu *xhaHandler = new XMLHandlerWriteMenu(XMLParameters, NUMBER_OF_PARAMETERS, TEMP_FILE, XML_File);

//The Parsers Handler pointer is set.
xpaParser->setHandler(xhaHandler);
//The XML file is parsed
xpaParser->parse(infile);
       
//Deallocate allocated memory
delete xhaHandler;
delete xpaParser;

Problemet ligger i at når linien "delete xpaParser" bliver kaldt går maskinen kold og kommer med fejlmeddelelsen: "Freeing same memory twice".

Mit spørgsmål er så, sørger default destructoreren i XMLParseren selv for at delete/deallokere hukommelsen som dens tilhørende XMLHandler?
Avatar billede chries Nybegynder
11. marts 2002 - 10:28 #1
En destructor dealokerer intet hukommelse. Den dealokerer kun noget hvis en har skrevet kode til at dealokere i destructoren.
Avatar billede chries Nybegynder
11. marts 2002 - 10:31 #2
altså den deallokere intet der er new'et :-)
Avatar billede jpk Nybegynder
11. marts 2002 - 10:35 #3
Har du prøvet at slette objekterne i modsat rækkefølge, for at se om du stadig får fejlen?
Avatar billede strickie Nybegynder
11. marts 2002 - 10:36 #4
Hvad kan det så skyldes?

INTET sted i min XMLParset klasse bliver den tilhørende XMLHandler delete'et, men hvis jeg delete'er mine to objekter som i ovenstående kode. kommer den fejlmeddelelse. Den lugter af at min XMLParser får nedlagt XMLHandler objektet, men jeg har INTET kode der gør det.

Jeg er helt blank!
Avatar billede chries Nybegynder
11. marts 2002 - 10:41 #5
Du har ingen destructor ?
Bruger du en form for smart pointer inde i dine klasser ?
Avatar billede strickie Nybegynder
11. marts 2002 - 10:44 #6
Det gør ingen forskel hvilken rækkefølge objekterne slettes i.

En smart pointer??

class XMLParser
{
public:
    void setHandler(XMLHandler* xhaHandlerPAR);
    void parse(FILE *XMLFile);
private:
    XMLHandler* xhaHandler;
};

Sådan ser klassen ud, er den pointer "Smart"?
Avatar billede chries Nybegynder
11. marts 2002 - 10:50 #7
smartpointer er en der delete'r selv når den ikke skal bruges mere.
Hvis du ikke ved hvad det er,har du nok ikke brugt den. Indeholder de to klasser for meget kode at poste her ?
Avatar billede strickie Nybegynder
11. marts 2002 - 11:01 #8
Jeg prøver lige at rode lidt videre.
Jeg har to steder hvor jeg bruger mine handler og parser klasser og det ene sted virker det fint, det andet sted går den kold.
Jeg tror problemet er noget andet end destructoreren.

Tak for indsatsen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester