Malloc()

Páginas: 16 (3798 palabras) Publicado: 12 de septiembre de 2013
Control de
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.

Estos documentos también te pueden resultar útiles

  • cruz roja filial malloco

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS