Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

operator delete problem!

[es] :: C/C++ programiranje :: operator delete problem!

[ Pregleda: 3306 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.winn.dial.virgin.net



+4 Profil

icon operator delete problem!23.03.2004. u 20:32 - pre 244 meseci
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.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.microsoft.com



+18 Profil

icon Re: operator delete problem!23.03.2004. u 20:54 - pre 244 meseci
Ok, par pitanja, mislim da su u redosledu prioriteta:

1) Da li koristis SAFE_DELETE ili tako nesto kada pozivas delete?
2) Da li si overloadovao i operator delete[] ? Mozda pokusavas da obrises niz objekata.
3) Postoje jos dva oblika operator delete-a koja kompajler koristi:

void __cdecl operator delete(
void * object,
void * memory
) throw();

void __cdecl operator delete(
void * object,
const std::nothrow_t&
) throw();

Da li si i njih overloadovao?
http://msdn.microsoft.com/libr...vclib/html/vclrfoperatordelete[].asp
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.glfd.dial.virgin.net



+4 Profil

icon Re: operator delete problem!31.03.2004. u 20:48 - pre 244 meseci
Huh, nije bilo nijedan od tih razloga, memory manager je zaista "tvrdo" napisan i te dechje boljke su davno istrebljene.
Posle chachkanja po kompajleru i malo vike sve je proradilo kako treba.

PS
Ovo je vec drugi topic gde kukam na VC7.1. Zar je moguce da kompajler samo kod mene u firmi pravi gluposti i daje ponekad bezvezni kod??? I to samo na Xboxu, PC verzija je uvek OK??? Pft, chudno.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.microsoft.com



+18 Profil

icon Re: operator delete problem!31.03.2004. u 22:41 - pre 244 meseci
Napisi o cemu se radi, da bi mogli da vidimo sta tu zapravo ima. Stvarno me zanima.

Ja sam dve godine radio na Xboxu, i nisam imao problema, ali to ne znaci da tu ne postoje problemi. Zato, molim te opisi koje je bilo resenje, mozda postoji bag...
 
Odgovor na temu

[es] :: C/C++ programiranje :: operator delete problem!

[ Pregleda: 3306 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.