Hol a törlési üzemben tudja, hány bájt kell engedni - verem túlcsordulás az orosz
Valami azt gondoltam, hogy nem értem, egy ilyen triviális dolog.
Amennyiben törölni [] operátor megtudja, hogy szükség van, hogy kiadja a 20 * sizeof (int) byte?
Mi történik, ennek eredményeként az alábbi kódot:
és hogy ez érvényes egyáltalán? Konzol kimenet:
Ie között kiosztott memória területeken még mindig 64 bit. Az utolsó szám mindig páros szám, és legalább 2 nagyobb, mint a mérete az első tömb.
Egy másik kísérletben (a fenti volt Win7 / Qt / mingw), most Ubunto14.04 / Qt / g ++:
Konzol kimenet:
Operator „új szögletes zárójelben” információkat tárol az elemek száma a tömbben. törli [], hogy ezt az információt és a destruktorai elemekkel.
A fordító generál kódot e szereplők a következők:
1. megjegyzés: Tény, hogy ahelyett, hogy malloc és free hívó függvény void * operátor új [] (size_t bájt) és érvénytelen üzemeltető törli [] (void *). de mivel okoznak valami hasonló malloc / szabad, összefüggésben a kérdés, hogy lehet figyelmen kívül hagyni.
2. megjegyzés: kivételfeldolgozás, a fordító generál egy try-catch blokkban új [].
Ie akkor is, ha az üzemeltető törli [] a mutató példányt aktív szereplő hivatkozás a megfelelő memória (ami, visszanyert egyidejűleg adatokat, és amely valahol a tárolt adatok egy mutató, jól, vagy valami hasonló), amely felelős az összeg az eredetileg kijelölt byte ez az index, viszont figyelembe veszi a méret eredetileg elkülönített memória, amikor kiveszi? - StateItPrimitive április 8 '16 at 07:50
Ami a második részt nem vagyok egészen biztos, hosszú ideig a C ++ nem működött, de a problémák nem látja, mint minden helyesen:
Válaszol december 14 '15 at 23:50