Ellenőrzés memóriafoglalási

Könyvtári funkciók malloc (calloc) vagy az új üzemeltető használja a funkciókat az operációs rendszer a memóriát. Ha a kért memória mérete túl nagy (valamint, amikor megpróbál létrehozni egy sor nulla vagy negatív elemek száma), az operációs rendszer nem a memóriát, majd a függvény vagy operátor visszatérési értéke null (NULL).

if (pi == NULL)

printf ( „A szükséges memória nincs kiválasztva!”);

Memórialefoglalás egy egydimenziós dinamikus tömb

Annak érdekében, hogy a memóriát egy egydimenziós dinamikus tömb, C ++ 2 módja van.

1) a működés új. amely rendelkezésre bocsátja egy tömb elhelyezése részének megfelelően méretezett dinamikus memória, és nem inicializálni a tömb elemeinek.

/ * A memória dinamikus mérete 100 * sizeof (int) byte * /

mas = új int [100];

/ * Kiosztani dinamikus memória mérete n * sizeof (dupla) byte * /

kettős * m = új dupla [n];

A memória dinamikus tömb méretét úgy kell teljesen meghatározott.

2) a könyvtár funkciója malloc (calloc)

/ * Mérete a memória dinamikus 10 * sizeof (float) bájt * /

Mivel a függvény malloc (calloc) visszaad egy pointert a nyers adatok void *, azt kell átalakítani a nyers adatokat kapott az index mutató deklarált típus.

Kétdimenziós dinamikus tömböket

calloc művelet malloc, new segítségével kiválaszthatja csak egydimenziós tömbök, így dolgozni többdimenziós tömbök, meg kell kezelni őket, mint egy sor mutató más tömbök. Például, úgy a problémát a memória dinamikus a tömb számokat a mérete n m.

1. módszer

Az első lépés van hozzárendelve egy mutató, hogy egy sor mutató, és a második lépésben a ciklusban minden egyes mutató tömb van allokálva a memória tömb a számok: int ** a = new int * [n];

A (int i = 0; i = n ;! ++ i)

Ez a módszer azonban szegény, hogy előírja az n + 1 memória kiosztás, és ez elég drága művelet ideje.

2. módszer

Az első lépésben a kiosztási mutató tömb és a tömb a számok a mérete n m. A második lépésben, minden egyes mutató a tömb van társítva egy karakterlánc egy sor számok. int ** a = new int * [n];

A (int i = 1; i = n ;! ++ i)

Ebben az esetben csak azt írja elő a két memória kiosztás.

Ahhoz, hogy a szabad memória szeretne:

törlése [] a; Így a második módszer ismét sokkal kevesebb függvény hívások törlése [], mint az első.

Kapcsolódó cikkek