Forum » Programiranje » [VC++] čuden memory leak
[VC++] čuden memory leak
MrStein ::
Ko v Visual Studio 2005 poženem program, mi na koncu napiše :
Program je v bistvu tole;
Zakaj one vrstice v metodi SetStringID povzročijo leak ? Če jih ni, ni leaka.
Zdaj sem odkril, da če member m_stringId definiram v CFoo, ne pa v CBar, potem ni leaka, samo ne morem vse memberje podrazredov v nadrazred zmetat, kje je potem smisel objektnega programiranja ?
Kaka ideja ?
LP,
David
Detected memory leaks! Dumping objects -> f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {304} normal block at 0x003BABB0, 30 bytes long. Data: < 9Px > AC 39 50 78 06 00 00 00 06 00 00 00 01 00 00 00 Object dump complete.
Program je v bistvu tole;
// .h fajl class CFoo { public: virtual void ReadParameters(std::vector<std::string> &a_words){ } }; class CBar : public CFoo { public: boolean SetStringID(std::string &a_stringId); virtual void ReadParameters(std::vector<std::string> &a_words); protected: CString m_stringId; }; // .cpp fajl: boolean CBar::SetStringID(std::string &a_stringId) { //m_stringId = CString("foobar"); // tudi samo ta vrstica naredi leak //m_stringId.AppendChar('x'); // ali ta m_stringId.Append(CString(a_stringId.c_str())); return true; } void CBar::ReadParameters(std::vector<std::string> &a_words){ SetStringID(a_words[1]); } // "aktivna" koda pa je: // ... CFoo x = new CBar; x->ReadParameters(en_vektor_s_stringi); delete x;
Zakaj one vrstice v metodi SetStringID povzročijo leak ? Če jih ni, ni leaka.
Zdaj sem odkril, da če member m_stringId definiram v CFoo, ne pa v CBar, potem ni leaka, samo ne morem vse memberje podrazredov v nadrazred zmetat, kje je potem smisel objektnega programiranja ?
Kaka ideja ?
LP,
David
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
MrStein ::
Ja, je ravno sodelavec namignil. Hvala.
C++ sux.... (v primerjavi z Javo. Kot da bi v assemblerju programiral)
C++ sux.... (v primerjavi z Javo. Kot da bi v assemblerju programiral)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
iztok04 ::
Po mojem je problem v staticni definiciji x objekta tipa CFoo: CFoo x = new CBar;
Poizkusi tole:
CBar x = new CBar;
x.ReadParameters(en_vektor_s_stringi);
delete x;
ali pa:
CBar *x = new CBar;
x->ReadParameters(en_vektor_s_stringi);
delete x;
Poizkusi tole:
CBar x = new CBar;
x.ReadParameters(en_vektor_s_stringi);
delete x;
ali pa:
CBar *x = new CBar;
x->ReadParameters(en_vektor_s_stringi);
delete x;
MrStein ::
Prvo je sintaktično narobe, drugo pa ne pride v poštev, ker koda mora delovati z vsemi podrazredi od CFoo.
arjan_t:
Heh, sem nedavno pisal en program v Javi.
Nato sem ga napisal še v C, ter še v C++.
Ugani razmerje hitrosti.
arjan_t:
cilj c++ je hitrost in majhna poraba rama, svojo nalogo opravlja dobro
Heh, sem nedavno pisal en program v Javi.
Nato sem ga napisal še v C, ter še v C++.
Ugani razmerje hitrosti.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Senitel ::
Zelo odvisno kaj počneš... Generalno pa C/C++ ne bi smel bit počasnejši od Jave. Oziroma, če je počasnejši, potem počneš nekaj narobe.
Sicer je iztok04 verjetno meril na napako v tvoji kodi, ki si jo postal zgoraj:
Sicer je iztok04 verjetno meril na napako v tvoji kodi, ki si jo postal zgoraj:
CFoo x = new CBar; x->ReadParameters(en_vektor_s_stringi); delete x;
MrStein ::
Ja, zvezdica manjka v "CFoo *x = new CBar;"
C
Java
C++
Mislim, da je C++ delal kar 2x dlje kot Java verzija.
C
Java
C++
Mislim, da je C++ delal kar 2x dlje kot Java verzija.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
MrStein ::
Ne ravno. Gre za eno obdelavo geometričnih podatkov.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
l0g1t3ch ::
Jest sm že kar dosti stvari naredu v Javi pa se mi ne zdi da bi bila ravno počasna.
Nazadnje sm delal neke stvari z zanavanjem gibanja in sm prenesel nekaj kode iz Aforge knjižice ki je za C# in je spisana z uporabo kazalcev (torej zelo C like koda ) v Javo pa stvar nevem če je bla par % počasnej.
Nazadnje sm delal neke stvari z zanavanjem gibanja in sm prenesel nekaj kode iz Aforge knjižice ki je za C# in je spisana z uporabo kazalcev (torej zelo C like koda ) v Javo pa stvar nevem če je bla par % počasnej.
Jean-Paul ::
Hja, tudi v asemblerju se da napisati stvari tako, da tečejo počasneje kot v npr. basicu. Hitrost izvajanja je treba primerjati čim bolj objektivno.
arjan_t ::
Heh, sem nedavno pisal en program v Javi.
Nato sem ga napisal še v C, ter še v C++.
Ugani razmerje hitrosti.
nisem napisal da je C/C++ hitrostni prvak, če že primerjaš z javo primerjaj še porabo ram-a
in ne mislim da je java ipd. slab jezik
MrStein ::
Ja v C++ sem uporabil razrede. Več ali manj 1:1 kot v Javi.
V C pa sem moral "poenostaviti", ker pač ni objektno orientiran jezik.
Če te zanima, ti lahko pošljem C in C++ kodo.
V C pa sem moral "poenostaviti", ker pač ni objektno orientiran jezik.
Če te zanima, ti lahko pošljem C in C++ kodo.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | "Dinamicna" sprememba razreda v C++Oddelek: Programiranje | 1915 (1307) | Spura |
» | Android - ZačetnikOddelek: Programiranje | 1773 (1098) | hurlimannxt |
» | [Java] Objekt poslan k metodi v kakšnem stanju?Oddelek: Programiranje | 1543 (990) | shadeX |
» | [C#] izdelava tabeleOddelek: Programiranje | 1986 (1812) | majoneza |
» | problem v C#Oddelek: Programiranje | 1968 (1683) | dvojka |