"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs
ligt eraan of je de objecten maakt op de stack of op de heap.Het is toch zo dat als ik iets globaal declareer, en het programma stopt (of dll ontlaadt) dat het object dan opgeruimd wordt...?
bijvoorbeeld, met class Blaat:
code:
1
| Blaat g_blaaten[12]; |
zo worden er 12 objecten van het type Blaat op de stack gemaakt, en deze worden automatisch opgeruimd.
code:
1
2
3
| Blaat * g_blaaten; ... g_blaaten = new Blaat[12]; |
zo maak je ze op de heap (met new) dus moet je ze ook weer opruimen (met delete[] g_blaaten)
't ligt gewoon op de stack. De lijst gebruikt intern echter wel pointers, en deze worden ook goed opgeruimd mits ik dit dus expliciet laat doen.. dwz, de lijst zelf leeg laat maken. Maar de lijst wordt niet vanzelf opgeruimd (wil ik wel) als het programma stopt...
'k heb alle destructors, en ik maak in principe niks aan op de heap (behalve dus in de lijst wat het ook weer opruimt)
edit:
Als ik het trouwens lokaal doe, dus lijst vullen, bewerkingen uitvoeren, etc. dan wordt de lokale lijst wel goed opgeruimd, maar als ik dus vervolgens hetzelfde doe met de globale lijst (zelfde lijst alleen globaal dus), dan ruimt ie 'm niet op als het programma stopt...
edit:
Als ik het trouwens lokaal doe, dus lijst vullen, bewerkingen uitvoeren, etc. dan wordt de lokale lijst wel goed opgeruimd, maar als ik dus vervolgens hetzelfde doe met de globale lijst (zelfde lijst alleen globaal dus), dan ruimt ie 'm niet op als het programma stopt...
"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs
Hoe meet je of er geheugen lekt?
Sommige profilers/debuggers schijnen namelijk soms die laatste opruiming niet mee te nemen.
Sommige profilers/debuggers schijnen namelijk soms die laatste opruiming niet mee te nemen.
zit in VC++... dan staat er iets als
anders namelijk niet...
code:
1
2
3
4
5
6
7
8
9
10
| Detected memory leaks!
Dumping objects ->
{3760} normal block at 0x014E6488, 12 bytes long.
Data: <Juman Sucks > 4A 75 6D 61 6E 20 53 75 63 6B 73 00
{3759} normal block at 0x014E73B0, 21 bytes long.
Data: <Llama Whippin' I> 4C 6C 61 6D 61 20 57 68 69 70 70 69 6E 27 20 49
{3758} normal block at 0x014E6BA8, 9 bytes long.
Data: <Nullsoft > 4E 75 6C 6C 73 6F 66 74 00
Object dump complete.
The thread 0x520 has exit |
anders namelijk niet...
"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs
Verwijderd
Bij de standaard C++ array en de MFC arrays is het in principe altijd zo dat als je zelf objecten met new aanmaakt en ze in een array stopt (die op de stack is gemaakt) bij het afsluiten die array op de stack wel netjes zijn eigen zooi opruimt maar verder van de pointers in de array afblijft. Als jij die dus met new op de heap hebt aangemaakt dan moet je zelf alle pointers dus nog deleten! Doe je dit niet dan zit je inderdaad met een memoryleak.
(en in dat geval doe je het nu dus goed: tijdens het unloaden van de dll moet je dan je eigen zooi opruimen)
Mocht dit nog steeds niet al te veel helpen post dan effe de code waarin je die objecten aanmaakt+delete+in de array stopt
(en in dat geval doe je het nu dus goed: tijdens het unloaden van de dll moet je dan je eigen zooi opruimen)
Mocht dit nog steeds niet al te veel helpen post dan effe de code waarin je die objecten aanmaakt+delete+in de array stopt
Pagina: 1