47
Punteros Algoritmos y Estructuras de Datos II Algoritmos y Estructuras de Datos II () Punteros 1 / 12

Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

Algoritmos y Estructuras de Datos II

Algoritmos y Estructuras de Datos II () Punteros 1 / 12

Page 2: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Contenidos

X Punteros.

X Parametros por valor vs. Parametros por referencia.

X Memoria Dinamica.

Algoritmos y Estructuras de Datos II () Punteros 2 / 12

Page 3: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

Son variables que almacenan direcciones de memoria

int x = 0;

int *p = &x;

1000

1001

1002

1003

01004x

1005

1006

1007

10041008p

1009

1010

Algoritmos y Estructuras de Datos II () Punteros 3 / 12

Page 4: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

Son variables que almacenan direcciones de memoria

int x = 0;

int *p = &x;

1000

1001

1002

1003

01004x

1005

1006

1007

10041008p

1009

1010

Algoritmos y Estructuras de Datos II () Punteros 3 / 12

Page 5: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

Son variables que almacenan direcciones de memoria

int x = 0;

int *p = &x;

1000

1001

1002

1003

01004x

1005

1006

1007

1004

1008p

1009

1010

Algoritmos y Estructuras de Datos II () Punteros 3 / 12

Page 6: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 7: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

0x

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 8: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

0x

p

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 9: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

0x

p q

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 10: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

0x

p q

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 11: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

4x

p q

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 12: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

4x

p q

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 13: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

4x

p q

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 14: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros

int main(void) {int x = 0 ;

int *p = NULL;

int *q = NULL;

p = &x;

(*p) = 4;

printf(" %d\n", x);

q = p;

printf(" %d\n", *q);

return(0);

}

4x

p q

Algoritmos y Estructuras de Datos II () Punteros 4 / 12

Page 15: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Arreglos

int main(void) {int i = 0;

int my_array[4] = {7,9,3,0};

printf(" %d\n", my_array[0]);

for (i = 0; i < 4; i++) {printf(" %d ", my_array[i]);

}

return(0);

}

7 9 3 0

my array

Notar: my array es un puntero constante al primer elemento del arreglo.

Algoritmos y Estructuras de Datos II () Punteros 5 / 12

Page 16: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Arreglos

int main(void) {int i = 0;

int my_array[4] = {7,9,3,0};

printf(" %d\n", *my_array);

for (i = 0; i < 4; i++) {printf(" %d ", *(my_array + i));

}

/* my_array = NULL error! */

return(0);

}

7 9 3 0

my array

Notar: my array es un puntero constante al primer elemento del arreglo.

Algoritmos y Estructuras de Datos II () Punteros 5 / 12

Page 17: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por valor

int main(void) {int x = 1;

pivote(x);

printf(" %d", x);

return(0);

}

void pivote(int piv) {piv = 5;

}

Algoritmos y Estructuras de Datos II () Punteros 6 / 12

Page 18: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por valor

int main(void) {int x = 1;

pivote(x);

printf(" %d", x);

return(0);

}

void pivote(int piv) {piv = 5;

}

1x

Algoritmos y Estructuras de Datos II () Punteros 6 / 12

Page 19: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por valor

int main(void) {int x = 1;

pivote(x);

printf(" %d", x);

return(0);

}

void pivote(int piv) {piv = 5;

}

1x

1piv

Algoritmos y Estructuras de Datos II () Punteros 6 / 12

Page 20: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por valor

int main(void) {int x = 1;

pivote(x);

printf(" %d", x);

return(0);

}

void pivote(int piv) {piv = 5;

}

1x

5piv

Algoritmos y Estructuras de Datos II () Punteros 6 / 12

Page 21: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por valor

int main(void) {int x = 1;

pivote(x);

printf(" %d", x);

return(0);

}

void pivote(int piv) {piv = 5;

}

1x

Algoritmos y Estructuras de Datos II () Punteros 6 / 12

Page 22: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por referencia

int main(void) {int x = 1;

pivote(&x);

printf(" %d", x);

return(0);

}

void pivote(int *piv) {(*piv) = 5;

}

Algoritmos y Estructuras de Datos II () Punteros 7 / 12

Page 23: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por referencia

int main(void) {int x = 1;

pivote(&x);

printf(" %d", x);

return(0);

}

void pivote(int *piv) {(*piv) = 5;

}

1x

Algoritmos y Estructuras de Datos II () Punteros 7 / 12

Page 24: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por referencia

int main(void) {int x = 1;

pivote(&x);

printf(" %d", x);

return(0);

}

void pivote(int *piv) {(*piv) = 5;

}

1x

piv

Algoritmos y Estructuras de Datos II () Punteros 7 / 12

Page 25: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por referencia

int main(void) {int x = 1;

pivote(&x);

printf(" %d", x);

return(0);

}

void pivote(int *piv) {(*piv) = 5;

}

5x

piv

Algoritmos y Estructuras de Datos II () Punteros 7 / 12

Page 26: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Punteros y Parametros por Referencia

Parametros por referencia

int main(void) {int x = 1;

pivote(&x);

printf(" %d", x);

return(0);

}

void pivote(int *piv) {(*piv) = 5;

}

5x

Algoritmos y Estructuras de Datos II () Punteros 7 / 12

Page 27: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamica

int main(void) {char names[1000][100];...

}

Hasta ahora hemos usado memoria estatica

Reservada en tiempo de compilacion

Liberada automaticamente al final de la ejecucion

Algoritmos y Estructuras de Datos II () Punteros 8 / 12

Page 28: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamica

int main(void) {char names[1000][100];...

}

Hasta ahora hemos usado memoria estatica

¿Y si queremos reservar memoria por demanda?

Algoritmos y Estructuras de Datos II () Punteros 8 / 12

Page 29: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamica

int main(void) {char names[1000][100];...

}

Hasta ahora hemos usado memoria estatica

¿Y si queremos liberarla cuando ya no haga falta?

Algoritmos y Estructuras de Datos II () Punteros 8 / 12

Page 30: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

int i = 0;

int *p = NULL;

p = calloc(5, sizeof(int));

if (p != NULL) {for (i = 0; i < 5 ; i++) {

printf(" %d ", p[i]);

}free(p);

p = NULL;

}return(0);

}

Algoritmos y Estructuras de Datos II () Punteros 9 / 12

Page 31: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

int i = 0;

int *p = NULL;

p = calloc(5, sizeof(int));

if (p != NULL) {for (i = 0; i < 5 ; i++) {

printf(" %d ", p[i]);

}free(p);

p = NULL;

}return(0);

}

p

Algoritmos y Estructuras de Datos II () Punteros 9 / 12

Page 32: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

int i = 0;

int *p = NULL;

p = calloc(5, sizeof(int));

if (p != NULL) {for (i = 0; i < 5 ; i++) {

printf(" %d ", p[i]);

}free(p);

p = NULL;

}return(0);

}0 0 0 0 0

p

Algoritmos y Estructuras de Datos II () Punteros 9 / 12

Page 33: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

int i = 0;

int *p = NULL;

p = calloc(5, sizeof(int));

if (p != NULL) {for (i = 0; i < 5 ; i++) {

printf(" %d ", p[i]);

}free(p);

p = NULL;

}return(0);

}

p

Algoritmos y Estructuras de Datos II () Punteros 9 / 12

Page 34: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

int i = 0;

int *p = NULL;

p = calloc(5, sizeof(int));

if (p != NULL) {for (i = 0; i < 5 ; i++) {

printf(" %d ", p[i]);

}free(p);

p = NULL;

}return(0);

}

p

Algoritmos y Estructuras de Datos II () Punteros 9 / 12

Page 35: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicastruct _info_t {

char *name;

int age;

};

typedef struct _info_t *info_t;

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 36: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 37: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 38: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

0age

name

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 39: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

0age

name

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 40: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

24age

name

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 41: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

24age

name L e o 0

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 42: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

24age

name

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 43: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

24age

name

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 44: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 45: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Memoria Dinamicaint main(void) {

info_t p = NULL;

p = calloc(1, sizeof(struct _info_t));

assert(p != NULL);

p->name = malloc(4 * sizeof(char));

assert(p->name != NULL);

p->age = 24;

p->name = strncpy(p->name, "Leo", 4);

free(p->name);

p->name = NULL;

free(p);

p = NULL;

return(0);

}p

Algoritmos y Estructuras de Datos II () Punteros 10 / 12

Page 46: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

Verificando el uso de la memoria

int main(void) {int *p = calloc(1, sizeof(int));

return(0);

}

$ valgrind --leak-check=full --show-reachable=yes ./mi_programa

==17387== LEAK SUMMARY:

==17387== definitely lost: 4 bytes in 1 blocks

==17387== indirectly lost: 0 bytes in 0 blocks

==17387== possibly lost: 0 bytes in 0 blocks

==17387== still reachable: 0 bytes in 0 blocks

==17387== suppressed: 0 bytes in 0 blocks

==17387==

==17387== ERROR SUMMARY: 1 errors

Algoritmos y Estructuras de Datos II () Punteros 11 / 12

Page 47: Punteros - wiki.cs.famaf.unc.edu.ar Punteros Son variables que almacenan direcciones de memoria int x = 0; int *p = &x; 1000 1001 1002 1003 x 1004 0 1005 1006 1007 p 1008 1004 1009

¿Preguntas?

Algoritmos y Estructuras de Datos II () Punteros 12 / 12