Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Alocarea dinamica a memoriei

c



+ Font mai mare | - Font mai mic



Alocarea    dinamica a memoriei

Biblioteca standard a limbajului C pune la dispozitia utilizatorului functii care permit alocarea de zone de memorie in timpul executiei programului. O astfel de zona de memorie poate fi utilizata pentru a pastra date temporare. Zona respectiva poate fi eliberata in momentul in care nu mai sunt necesare datele care au fost pastrate in ea. Alocarea de zone de memorie si eliberarea lor in timpul executiei programelor permite gestionarea optima a memoriei de catre programator. Un astfel de mijloc de gestionare a memoriei il vom numi alocare dinamica a memoriei



Vom indica doua functii din bibloteca limbajului C utilizate frecvent in alocarea dinamica a memoriei. Prototipurile lor se afla in fisierele standard alloc.h si stdlib.h, deci pentru a le utiliza vom include unul din aceste fisiere.

Functia malloc permite alocarea unui bloc de memorie a carui dimensiune se specifica in octeti. Functia returneaza un pointer spre inceputul zonei alocate. Intrucat acest pointer trebuie sa permita memorarea oricarui tip de data in zona alocata, el este de tip void *

Prototipul functiei este:

void *malloc (unsigned n);

unde n este numarul de octeti al zonei de memorie care se aloca. In cazul in care n este prea mare, functia returneaza pointerul NULL.

Functia free elibereaza o zona de memorie alocata prin malloc. Prototipul ei este:

void free (void *p);

unde p este pointerul returnat de malloc la alocare, deci este pointerul spre inceputul zonei care se elibereaza.

Exemplu:

Functia memchar memoreaza un sir de caractere intr-o zona de memorie alocata prin functia malloc. Ea returneaza adresa de inceput a zonei in care s-a salvat sirul de caractere, deci returneaza un pointer spre tipul char.

#include <stdio.h>

#include <alloc.h>

#include <string.h>

char *memchar (char *s)

else

return NULL;

Observatii:

1o. In fisierul stdio.h exista definitia constantei NULL.

2o. Fisierul alloc.h s-a inclus deoarece contine prototipul functiei malloc.

3o. Fisierul string.h contine prototipurile functiilor strlen si strcpy.

4o. Functia malloc se apeleaza pentru a rezerva strlen(s)+1 octeti; strlen returneaza numarul de octeti ocupati de caracterele proprii ale lui s (fara caracterul NUL). Cum in zona de memorie rezervata prin malloc se pastreaza si caracterul NUL, lungimea returnata de functia strlen s-a marit cu 1.

5o. Pointerul returnat de malloc a fost convertit spre char *, deoarece el este de tip void *. Acest pointer se atribuie lui p, deci p pointeaza spre inceputul zonei de memorie alocate prin apelul functiei malloc. Se testeaza daca acest pointer este diferit de NULL (deci daca s-a putut aloca memoria de dimensiunea ceruta). In caz afirmativ, se transfera sirul prin apelul functiei strcpy, returnandu-se apoi valoarea pointerului p.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 890
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved