Malloc()
Páginas: 16 (3798 palabras)
Publicado: 12 de septiembre de 2013
corrupción y
pérdida de
memoria
Control de corrupción y pérdida de memoria
MacProgramadores
Acerca de este documento
Muchas aplicaciones fallan de forma impredecible debido a que se corrompe
la memoria, o simplemente acaban agotando toda la memoria del sistema
tras un periodo prolongado de uso debido a pérdidas de memoria. Este
reportaje explica cómo podemos detectarlos problemas de corrupción y
pérdida de memoria en nuestras aplicaciones usando una serie de
herramientas que existen en Mac OS X para tal fin.
Nota legal
Este reportaje ha sido escrito por Fernando López Hernández para MacProgramadores, y de acuerdo a los derechos que le concede la legislación española e internacional el autor prohíbe la publicación de este documento en
cualquier otroservidor web, así como su venta, o difusión en cualquier otro
medio sin autorización previa.
Sin embargo el autor anima a todos los servidores web a colocar enlaces a
este documento. El autor también anima a bajarse o imprimirse este reportaje
a cualquier persona interesada en conocer cómo usar estas herramientas.
Madrid, Junio 2010
Para cualquier aclaración contacte con:fernando@DELITmacprogramadores.org
Pág 2
Control de corrupción y pérdida de memoria
MacProgramadores
Tabla de contenido
Corrupción de memoria..............................................................................4
Pérdida de memoria ..................................................................................5
Las malloctools.........................................................................................6
Depurar aplicaciones Objective-C.............................................................. 11
La librería de interposición libgmalloc.dylib ................................................ 12
El comando leaks .................................................................................... 13
El comando malloc_history....................................................................... 15
El comando heap..................................................................................... 16
El comando vmmap ................................................................................. 19
Herramientas de productividad ................................................................. 22
Referencias ............................................................................................. 22
Pág 3
Control de corrupción y pérdida de memoria
MacProgramadores
Corrupción de memoria
La corrupción de memoria ocurre cuando el programa escribe datos en una
zona de memoria distinta a la esperada. En este caso lo mejor que puede
pasar es que el sistema operativo lo detecte yel programa casque. Si el sistema operativo no lo detecta, este cambio acabará afectando a otro trozo de
programa que tarde o temprano fallará.
El error de corrupción de memoria más común en C es el del desbordamiento de buffer, el cual ocurre cuando un programa escribe más allá del
trozo de memoria que teníamos reservada para él. Por ejemplo:
char* mi_copia = malloc (strlen(cadena));
strcpy(mi_copia, cadena);
Aquí estamos escribiendo un byte más allá del bloque de memoria reservado,
para corregirlo deberíamos de haber reservado un byte más para que pudiéramos almacenar el carácter de final de cadena:
char* mi_copia = malloc (strlen(cadena)+1);
strcpy (mi_copia, cadena);
Este tipo de errores también es muy típico que se produzca por bucles que
dan una vuelta más de las quedeberían:
char digitos[10];
bool encontrado=false;
for (int i=0;inombre,"Fernando");
strcpy(p->apellidos,"Lopez");
printf("Nombre:%s Apellidos:%s\n",p->nombre,p->apellidos);
free(p);
printf("Nombre:%s Apellidos:%s\n",p->nombre,p->apellidos);
return 0;
}
Listado 2: Programa que escribe en memoria liberada
El Listado 2 muestra un programa que escribe en memoria liberada por
free()....
Leer documento completo
Regístrate para leer el documento completo.