Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo:...
Transcript of Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo:...
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