Een vriendin vroeg mij vanavond wat raad over een C++ probleempje.
Eerst dacht ik dat het een standaard pointerfoutje was,
maar bij nader inzien versta ik zelf niet wat het probleem is!
Ziehier een stukje code:
Het probleem is nu dat bij het verlaten van die scope,
de inhoud van het object 'vandaag' veranderd is naar garbage...
Hoe kan dat in godsnaam?
Ok, 'p' gaat out of scope en wordt vernietigd,
maar 'p' is helemaal onafhankelijk van 'vandaag', want:
&p.datum != vandaag . (haal ik uit de debugger)
Hoe kan het dan dat de inhoud van 'vandaag' gewijzigd wordt???
Het gebeurt nochtans in de destructor van Promotie, voor zover ik uit de debugger kan afleiden...
Eerst dacht ik dat het een standaard pointerfoutje was,
maar bij nader inzien versta ik zelf niet wat het probleem is!
Ziehier een stukje code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // Datum is gewoon een klasse met 3 int attributen: dag, maand en jaar
typedef struct{
Datum datum;
...
}Promotie;
// De eigenlijke probleemcode
{
Promotie p;
p.datum = *vandaag;
p.werknemer = *b;
p.nieuweLoonschaal = b->getLoonschaal();
promoties.push_back(p);
} |
Het probleem is nu dat bij het verlaten van die scope,
de inhoud van het object 'vandaag' veranderd is naar garbage...
Hoe kan dat in godsnaam?
Ok, 'p' gaat out of scope en wordt vernietigd,
maar 'p' is helemaal onafhankelijk van 'vandaag', want:
&p.datum != vandaag . (haal ik uit de debugger)
Hoe kan het dan dat de inhoud van 'vandaag' gewijzigd wordt???
Het gebeurt nochtans in de destructor van Promotie, voor zover ik uit de debugger kan afleiden...
[ Voor 25% gewijzigd door DieterVDW op 31-08-2004 00:39 ]