[ NastyBoy @ 23.03.2004. 20:32 ] @
Veoma nezgodan i chudan problem (multiplatform) koji sam sasvim sluchajno primetio. 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); } 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. |