Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sda-ab:laboratoare:02 [2021/01/07 18:59]
marina.ciocirlan [1. Alocare dinamică]
sda-ab:laboratoare:02 [2021/03/02 09:07] (current)
ruben_gilian.udroiu [2. Structuri de date]
Line 1: Line 1:
-===== Laboratorul ​02: Alocare dinamica, structuri =====+===== Laboratorul ​1: Alocare dinamica, structuri =====
  
 ==== Obiective ===== ==== Obiective =====
Line 7: Line 7:
   * să lucreze cu vectori și matrice alocate dinamic.   * să lucreze cu vectori și matrice alocate dinamic.
  
 +Structura laboratorului se gaseste in **[[https://​github.com/​sda-ab/​lab-01-tasks|acest link.]]**
  
 ===== 1. Alocare dinamică ===== ===== 1. Alocare dinamică =====
Line 18: Line 19:
 **Alocarea memoriei** **Alocarea memoriei**
  
-  -  ​Funcția **malloc** are drept rezultat adresa zonei de memorie alocate (de tipul void* ) și ca argument, dimensiunea zonei de memorie alocate, exprimate în octeți. Dacă există suficient spatiu liber in HEAP, atunci un bloc de memorie continuu de dimensiunea specificată va fi marcat ca ocupat, iar funcția malloc va returna un pointer ce conține adresa deînceput a acelui bloc. Dacă nu există spațiu pentru a se face alocarea, funcția malloc întoarce NULL. Accesarea blocului alocat se realizează printr-un pointer către adresa de început a blocului. ​ +Funcția **malloc** are drept rezultat adresa zonei de memorie alocate (de tipul void* ) și ca argument, dimensiunea zonei de memorie alocate, exprimate în octeți. Dacă există suficient spatiu liber in HEAP, atunci un bloc de memorie continuu de dimensiunea specificată va fi marcat ca ocupat, iar funcția malloc va returna un pointer ce conține adresa deînceput a acelui bloc. Dacă nu există spațiu pentru a se face alocarea, funcția malloc întoarce NULL. Accesarea blocului alocat se realizează printr-un pointer către adresa de început a blocului. ​
- +
- +
-  -  Funcția **free** are drept argument o adresă (un pointer) și eliberează zona de la adresa respectivă +
-  -  Funcția **calloc**; dacă există suficient spațiu liber în HEAP, atunci un bloc de memorie continuu va fi marcat ca ocupat, iar funcția calloc va returna un pointer ce conține adresa de început a acelui bloc +
-  - Funcția **realloc** ​ void * realloc( void *p, int dim ); dacă există suficient spațiu în HEAP, atunci un bloc de memorie continuu cu dimensiunea dim specificată va fi marcat ca ocupat. AStfel, funcția realloc returnează un pointer ce conține adresa de început a acelui bloc. Se copiază la noua locație conținutul blocului inițial și se eliberează memoria de la vechea adresă.  +
- +
-<note important>​Dacă nu există suficient spațiu liber, realloc întoarce NULL, iar pointerul inițial rămâne nemodificat.</​note>​+
  
 **Exemplu - malloc** **Exemplu - malloc**
- 
 <code > <code >
 char *str = malloc(10); ​           // Aloca memorie pentru 10 de caractere char *str = malloc(10); ​           // Aloca memorie pentru 10 de caractere
 +int n=10;
 int *a = malloc(n * sizeof(int));​ // Aloca memorie pentru n numere intregi int *a = malloc(n * sizeof(int));​ // Aloca memorie pentru n numere intregi
 </​code>​ </​code>​
  
  
-**Exemplu - calloc**+Funcția ​**free** are drept argument o adresă (un pointer) și eliberează zona de la adresa respectivă
  
 +Funcția **calloc**; dacă există suficient spațiu liber în HEAP, atunci un bloc de memorie continuu va fi marcat ca ocupat, iar funcția calloc va returna un pointer ce conține adresa de început a acelui bloc
 +
 +**Exemplu - calloc**
 <code > <code >
 int *v;    int *v;   
-int n=3; +int n = 3; 
-v=(int*)calloc(n,​sizeof(int));​ // Aloca spațiu pentru n=3 întregi și îi inițializez cu 0+v = calloc(n,​sizeof(int));​ // Aloca spațiu pentru n=3 întregi și îi inițializez cu 0
 </​code>​ </​code>​
 +
 +Funcția **realloc** ​ void * realloc( void *p, int dim ); dacă există suficient spațiu în HEAP, atunci un bloc de memorie continuu cu dimensiunea dim specificată va fi marcat ca ocupat. AStfel, funcția realloc returnează un pointer ce conține adresa de început a acelui bloc. Se copiază la noua locație conținutul blocului inițial și se eliberează memoria de la vechea adresă. ​
 +
 +<note important>​Dacă nu există suficient spațiu liber, realloc întoarce NULL, iar pointerul inițial rămâne nemodificat.</​note>​
 +
 +
 +
 +
 +
  
  
-==== Exemplu ==== 
-<note tip>​zdgsbgddf</​note>​ 
 ===== 2. Structuri de date ===== ===== 2. Structuri de date =====
  
Line 57: Line 61:
                         * **Arbori** - favorizează păstrarea unor colecții de elemente sub formă ierarhică în stare sortată                         * **Arbori** - favorizează păstrarea unor colecții de elemente sub formă ierarhică în stare sortată
                         * **Grafuri** - favorizează conexiunile dintre elemente ​                         * **Grafuri** - favorizează conexiunile dintre elemente ​
- 
-<​hidden>​Insert here github link for lab2 source code!!!</​hidden>​ 
sda-ab/laboratoare/02.1610038764.txt.gz · Last modified: 2021/01/07 18:59 by marina.ciocirlan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0