Verificarea memoriei

Biblioteca funcții malloc (calloc) sau noul operator utilizează funcția sistemului de operare pentru alocarea memoriei. Dacă dimensiunea memoriei solicitate este prea mare (și, de asemenea, când încercați să creați un matrice de la zero sau un număr negativ de elemente), sistemul de operare nu va aloca memorie și apoi funcția sau operatorul va returna o valoare nulă (NULL).







dacă (pi == NULL)

printf ("Memoria necesară nu este selectată!");

Alocarea memoriei la o matrice dinamică unidimensională

Pentru a aloca memoria pentru o matrice dinamică unidimensională în C ++, există 2 moduri.

1) utilizând noua operație. care alocă să aloce o matrice de memorie dinamică cu dimensiunea corespunzătoare și nu vă permite să inițializați elementele matricei.

/ * alocarea dimensiunii dinamice a memoriei 100 * dimensiunea bytes (int) * /

mas = int int [100];

/ * alocarea dimensiunii dinamice a memoriei n * dimensiunea (dublu) octeților * /

dublu * m = dublu nou [n];

Atunci când se alocă memorie dinamică, dimensiunea matricei trebuie să fie complet definită.







2) folosind funcția bibliotecă malloc (calloc)

/ * alocarea dimensiunii dinamice a memoriei 10 * dimensiunea bytes (float) * /

Deoarece funcția malloc (calloc) returnează un pointer netratat *, este necesar să convertiți pointerul netosit la un pointer al tipului declarat.

Două dimensiuni dinamice

Calloc, malloc, noile operațiuni vă permit să selectați numai mese unidimensionale, astfel încât să lucrați cu matrice multidimensionale, trebuie să le tratați ca o serie de indicii pentru alte tablouri. De exemplu, luați în considerare sarcina de a aloca memorie dinamică pentru o serie de numere de mărime de la n la m.

Prima cale

La primul pas, este alocat un pointer la o serie de pointeri, iar în a doua etapă, într-o buclă, fiecărui pointer array este alocată o serie de numere în memorie: int ** a = new int * [n];

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

Cu toate acestea, această metodă este rea deoarece necesită n + 1 alocarea memoriei și aceasta este o operație destul de costisitoare.

A doua metodă

În primul pas, selectați o serie de indicatori și o serie de numere de mărime de la n la m. La a doua etapă, fiecare pointer din matrice este atribuit unui șir în matricea de numere. int ** a = nou int * [n];

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

În acest caz, sunt necesare numai 2 alocări de memorie.

Pentru a elibera memoria, trebuie:

șterge [] a; Astfel, a doua metodă necesită din nou mult mai puține apeluri către funcția delete [] decât prima.







Articole similare

Trimiteți-le prietenilor: