0% found this document useful (0 votes)
70 views4 pages

Limbaje de Programare Laboratorul 8: Alocarea Dinamic A A Memoriei

This document discusses dynamic memory allocation in C programming. It provides examples of using functions like malloc(), calloc(), realloc(), and free() to allocate and free memory dynamically. It also lists two programming exercises: 1) Writing a program to sort an array of names read from keyboard using a bubble sort function. 2) Writing a program to multiply a matrix stored as a 1D array with a vector, including functions to read/write the data and return the product vector.

Uploaded by

Camer Aptula
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
70 views4 pages

Limbaje de Programare Laboratorul 8: Alocarea Dinamic A A Memoriei

This document discusses dynamic memory allocation in C programming. It provides examples of using functions like malloc(), calloc(), realloc(), and free() to allocate and free memory dynamically. It also lists two programming exercises: 1) Writing a program to sort an array of names read from keyboard using a bubble sort function. 2) Writing a program to multiply a matrix stored as a 1D array with a vector, including functions to read/write the data and return the product vector.

Uploaded by

Camer Aptula
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

Limbaje de Programare

Laboratorul 8: Alocarea dinamică a memoriei


Dan Novischi
10 aprilie 2017

1. Introducere
Scopul acestui laborator este lucrul cu memoria dianamică a unui program C, lucrul cu
funct, iile pentru alocarea/dealocarea memoriei s, i utilizarea memoriei alocate pentru rezolva-
rea unor probleme din laboratoarele anterioare.

Alocarea s, i de-alocarea memoriei se poate realiza ı̂n limbajul C prin intermediul a patru
funct, ii din biblioteca stdlib.h a caror headere sunt prezentate mai jos.

1 /* Aloca un bloc de memorie cu un numar de size octeti. */


2 void* malloc (unsigned int size);
3

4 /*
5 * Aloca un bloc de memorie cu un numar de elemente (num)
6 * si mariemea in octeti a unui element (size).
7 */
8 void* calloc (unsigned in num, unsigned int size);
9

10 /* Redimensioneaza un bloc de meorie la size */


11 void* realloc (void * ptr, unsigned int size);
12

13 /* Dealoca memoria data de pointerul ptr */


14 void free (void* ptr);

1
2. Exemple de programe
1 /* Crearea si afisarea unui vector de patrate
2 * pana la un anumit numar intreg n folosind
3 * functia malloc.
4 */
5 #include <stdio.h>
6 #include <stdlib.h>
7

8 int main(void)
9 {
10 int *pv; // pointer care va stoca
11 // adresa de iceput a memeoriei alocate
12 int i,n;
13

14 // Citeste numarul n de la tastatura


15 printf("n = ");
16 scanf("%d",n);
17 printf("\n");
18

19 // Aloca vectorul de n elemente


20 pv = (int*) malloc(n*sizeof(int));
21

22 // Populeaza vectorul de patrate pana la n


23 for(i = 0; i < n; i++){
24 pv[i] = i*i;
25 }
26

27 // Afisieaza elementele vectorului


28 for(i = 0; i < n; i++){
29 printf("pv[%d] = %d\n", i, pv[i]);
30 }
31

32 // Dealoca vectorul
33 free(pv);
34

35 return 0;
36 }

2
1 /* Crearea unui string (sir de caractere) dinamic */
2 #include <stdio.h>
3 #include <stdlib.h>
4

5 int main(){
6 char *str;
7

8 /* Allocare initiala la 15 elemente char */


9 str = (char *) malloc(15*sizeof(char));
10 strcpy(str, "Re-alocare");
11 printf("String = %s\n, str);
12

13 /* Re-alocare pana la 25 de elemente char*/


14 str = (char *) realloc(str, 25*sizeof(char));
15 strcat(str, " string");
16 printf("String = %s\n", str);
17

18 free(str);
19 return 0;
20 }

3
3. Cerint, e
Cerint, a 1 (4p) Să se scrie un program pentru ordonarea unor nume de persoane citite de
la tastură respectand următoarele cerint, e:

a) Numele de persone vor fi memorate inttr-un array dinamic.

b) Apelat, i functia prezentată mai jos pentru a sorta array-ul.

c) Afis, ati fiecare nume din array-ul sortat pe cate o linie.

1 void bubleSort(char** strs, int len){


2 int i, j;
3 char *aux;
4 for(i = 0; i < len -1; i++)
5 for(j = 0; j < len - i -1; j++)
6 if(strcmp(strs[j], strs[j+1]) > 0){
7 aux = strs[j];
8 strs[j] = strs[j+1];
9 strs[j+1] = aux;
10 }
11 }

Cerint, a 2 (6p) Să se realizeze un program care sa inmult, easca o matrice cu un vector
respectand următoarele cerint, e:

a) Matricea va fi alocată dinmaic ca un array 1D, iar elementele acesteia se vor accesa
folosind aritmetica cu pointeri.

b) Pentru citirea matricii si respectiv a vectorului se vor creea s, i utiliza funct, iile
readMatrixFromKB(...) s, i readVectorFromKB(...) similare celor de la curs.

c) Pentru inmult, irea matricii a cu vectorul x se va implemta funct, ia cu următorul antet:

1 float* multiplyMatrixVector(float *a, float *x, int rows, int cols);

care returnează un nou vector reprezentand rezultatul inmult, irii.

d) Pentru afis, area matricii s, i a vectorilor se vor creea s, i utiliza funct, iile writeMatrix(...)
s, i writeVector(...) similare celor de la curs.

e) Se vor de-aloca corespunzator toate datele alocate dinamic.

You might also like