Recimo da preklopljeni operator delete ujedno vrshi pracenje "modula" koji je pozvao delete, znachi uproshceno :
Code:
void operator delete(void * p)
{
track_this();
MemoryManager::Free(p);
}
void operator delete(void * p)
{
track_this();
MemoryManager::Free(p);
}
Problem nastaje kad se delete pozove sa NULL pointerom. Po standardu, to bi trebalo da bude sasvim OK, odnosno operator delete treba da bude pozvan i za ovu vrednost.
Kada se ovo pokrene na PC-u (VS.NET2003) sve je OK, operator delete je pozvan i za nulu. Ali, kada se taj isti kod kompajlira na Xbox platformu (praktichno PC mashina, kompajler je isti) kompajler ovo optimizuje tako shto testira sa nulom i , u tom sluchaju, uopshte ne ulazi u delete! (Lepo se vidi u disassembly-u). Ovo se deshava i u Debug i u Release verziji, znachi nije nikakva surova optimizacija.
Da li neko ima predstave o chemu se ovde radi? Nisam uspeo da nadjem ovaj "bag" ni u jednoj listi, nigde na netu.