Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

 
CATEGORII DOCUMENTE





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







DOCUMENTE SIMILARE

Trimite pe Messenger
Tablouri multidimensionale - Exemple
Operatorul virgula
Constante caracter
Setarea culorilor
Intrari cu format
Operatori de incrementare si decrementare
Modifica informatia nodului cu info=para din lista
Implementarea cozilor prin tipul tablou
Constante sir
Pointeri si tablouri

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.

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 298
Importanta: rank

Comenteaza documentul:

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

Creaza cont nou

Distribuie URL

Adauga cod HTML in site



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