Introduzione al C Demo: Matrici allocate …salza/FI-C/demo-malloc-matrici.pdfDemo: Matrici allocate...

98
Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Claudio Ciccotelli

Transcript of Introduzione al C Demo: Matrici allocate …salza/FI-C/demo-malloc-matrici.pdfDemo: Matrici allocate...

Demo: Matrici allocate dinamicamente

Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR

Introduzione al C

Claudio Ciccotelli

2014/2015 Demo: Matrici allocate dinamicamente Pagina 2

Programma (1/3)

#include<stdio.h>

#include<malloc.h>

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 3

Programma (2/3)

void liberaMatrice(int **M, int r) {

int i;

for (i = 0; i < r; i++) {

free(M[i]);

}

free(M);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 4

Programma (3/3)

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 5

main()

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 6

creaMatrice(2, 3)

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 7

2 r 3 c i

M

2014/2015 Demo: Matrici allocate dinamicamente Pagina 8

creaMatrice(2, 3)

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 9

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

2014/2015 Demo: Matrici allocate dinamicamente Pagina 10

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

2014/2015 Demo: Matrici allocate dinamicamente Pagina 11

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

2014/2015 Demo: Matrici allocate dinamicamente Pagina 12

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

r

Tipo: int*

2014/2015 Demo: Matrici allocate dinamicamente Pagina 13

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

2014/2015 Demo: Matrici allocate dinamicamente Pagina 14

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

2014/2015 Demo: Matrici allocate dinamicamente Pagina 15

creaMatrice(2, 3)

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 16

2 r 3 c i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 17

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Inizializzazione

2014/2015 Demo: Matrici allocate dinamicamente Pagina 18

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Condizione (pre iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 19

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 20

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

c

Tipo: int

2014/2015 Demo: Matrici allocate dinamicamente Pagina 21

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 22

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 23

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 24

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Incremento (post iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 25

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Condizione (pre iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 26

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 27

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 28

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 29

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 30

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Incremento (post iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 31

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Condizione (pre iterazione 3)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 32

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Falsa Condizione (pre iterazione 3)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 33

2 r 3 c 2 i

M

Stack Heap

2014/2015 Demo: Matrici allocate dinamicamente Pagina 34

creaMatrice(2, 3)

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 35

Torniamo al main()

2014/2015 Demo: Matrici allocate dinamicamente Pagina 36

main()

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 37

main()

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 38

2 r 3 c i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

j

2014/2015 Demo: Matrici allocate dinamicamente Pagina 39

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

j

Inizializzazione

2014/2015 Demo: Matrici allocate dinamicamente Pagina 40

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

j

Condizione (pre iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 41

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

j

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 42

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 j

Inizializzazione

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 43

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 j

Condizione (pre iterazione 1)

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 44

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 j

Corpo (iterazione 1)

M[0]

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 45

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 j

Corpo (iterazione 1)

M[0] M[0][0]

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 46

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0

0 j

Corpo (iterazione 1)

M[0] M[0][0]

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 47

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0

1 j

Incremento (post iterazione 1)

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 48

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0

1 j

Corpo (iterazione 1)

Condizione (pre iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 49

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0

1 j

Corpo (iterazione 2)

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 50

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1

1 j

Corpo (iterazione 2)

M[0] M[0][1]

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 51

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1

2 j

Incremento (post iterazione 2)

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 52

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1

2 j

Corpo (iterazione 1)

Condizione (pre iterazione 3)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 53

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1

2 j

Corpo (iterazione 3)

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 54

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

2 j

Corpo (iterazione 3)

M[0] M[0][2]

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 55

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Incremento (post iterazione 3)

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 56

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Corpo (iterazione 1)

Condizione (pre iterazione 4)

Condizione (pre iterazione 4)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 57

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Falsa

Corpo (iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 58

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Corpo (iterazione 1)

Il ciclo interno termina

2014/2015 Demo: Matrici allocate dinamicamente Pagina 59

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Incremento (post iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 60

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Condizione (pre iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 61

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 62

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

0 j

Inizializzazione

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 63

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

0 j

Corpo (iterazione 2)

Condizione (pre iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 64

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3

0 j

Corpo (iterazione 1)

M[1] M[1][0]

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 65

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3

1 j

Incremento (post iterazione 1)

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 66

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3

1 j

Corpo (iterazione 2)

Condizione (pre iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 67

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4

1 j

Corpo (iterazione 2)

M[1] M[1][1]

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 68

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4

2 j

Incremento (post iterazione 2)

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 69

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4

2 j

Corpo (iterazione 2)

Condizione (pre iterazione 3)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 70

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

2 j

Corpo (iterazione 3)

M[1] M[1][2]

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 71

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Incremento (post iterazione 3)

Corpo (iterazione 2)

Condizione (pre iterazione 4)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 72

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Corpo (iterazione 2)

Condizione (pre iterazione 4)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 73

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Falsa

Corpo (iterazione 2)

Il ciclo interno termina

2014/2015 Demo: Matrici allocate dinamicamente Pagina 74

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Corpo (iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 75

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Incremento (post iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 76

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Condizione (pre iterazione 3)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 77

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Falsa Condizione (pre iterazione 3)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 78

2 r 3 c 2 i

M 0 1 2

3 4 5

3 j

2014/2015 Demo: Matrici allocate dinamicamente Pagina 79

main()

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 80

liberaMatrice(M, 2)

void liberaMatrice(int **M, int r) {

int i;

for (i = 0; i < r; i++) {

free(M[i]);

}

free(M);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 81

liberaMatrice(M, 2)

void liberaMatrice(int **M, int r) {

int i;

for (i = 0; i < r; i++) {

free(M[i]);

}

free(M);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 82

2 r i

M 0 1 2

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 83

2 r 0 i

M 0 1 2

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Inizializzazione

2014/2015 Demo: Matrici allocate dinamicamente Pagina 84

2 r 0 i

M 0 1 2

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Condizione (pre iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 85

2 r 0 i

M 0 1 2

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Corpo (iterazione 1)

M[0]

2014/2015 Demo: Matrici allocate dinamicamente Pagina 86

2 r 0 i

M

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Corpo (iterazione 1)

M[0]

2014/2015 Demo: Matrici allocate dinamicamente Pagina 87

2 r 1 i

M

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Incremento (post iterazione 1)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 88

2 r 1 i

M

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Condizione (pre iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 89

2 r 1 i

M

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Corpo (iterazione 2)

M[1]

2014/2015 Demo: Matrici allocate dinamicamente Pagina 90

2 r 1 i

M

for (i = 0; i < r; i++) {

free(M[i]);

}

Corpo (iterazione 2)

M[1]

2014/2015 Demo: Matrici allocate dinamicamente Pagina 91

2 r 2 i

M

for (i = 0; i < r; i++) {

free(M[i]);

}

Incremento (post iterazione 2)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 92

2 r 2 i

M

for (i = 0; i < r; i++) {

free(M[i]);

}

Condizione (pre iterazione 3)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 93

2 r 2 i

M

for (i = 0; i < r; i++) {

free(M[i]);

}

Falsa Condizione (pre iterazione 3)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 94

liberaMatrice(M, 2)

void liberaMatrice(int **M, int r) {

int i;

for (i = 0; i < r; i++) {

free(M[i]);

}

free(M);

}

2014/2015 Demo: Matrici allocate dinamicamente Pagina 95

2 r 2 i

M

free(M);

2014/2015 Demo: Matrici allocate dinamicamente Pagina 96

2 r 2 i

M

free(M);

2014/2015 Demo: Matrici allocate dinamicamente Pagina 97

2 r 2 i

M

free(M);

2014/2015 Demo: Matrici allocate dinamicamente Pagina 98