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