Pregunta

Tengo un problema bastante raro en mi aplicación para el iPhone que es, creo, relacionada con la memoria conseguir dañado:

En un momento, necesito ordenar una matriz, que hago con -[sortArrayUsingFunction].

El resultado no es correcta a menos que sea destinar parte de la memoria con algo como void *test = malloc(2 * sizeof( int )) antes de la llamada al método o tienen, por ejemplo, una llamada a NSLog() (que nunca se invoca) en la función de clasificación.

En otras palabras: la clasificación sólo funciona si poco aumentar la memoria que se utilizó antes de llamar a la función de clasificación. Creo que esto se debe a que en algún momento, la memoria se corrompe.

¿Cómo se depura algo como esto?

¿Fue útil?

Solución

Parece que algunos de su código es el uso de objetos que ya están liberados. Una gran cantidad de ayuda con la depuración de este tipo de errores se proporciona en gran rel="nofollow OS X Depuración magia nota técnica, en especial el parte .

En su caso me desactivo piscinas autorelease (Ajuste del entorno de NSEnableAutoreleasePool=NO variable) o utilizar la función zombi (NSZombieEnabled=YES) para encontrar lugares en los que se envían mensajes a los objetos lanzados.

Otros consejos

Trate de ejecutar su programa en el simulador bajo Valgrind:

http://valgrind.org/

Y cómo usarlo bajo el simulador:

http://landonf.bikemonkey.org/code/iphone/iPhone_Simulator_Valgrind .20081224.html

Es posible que tenga que cambiar la ruta valgrind en el ejemplo de código dependiendo de donde se instala.

Pero esto no puede ser un desafío para depurar. Hay algunas herramientas para la detección de fuera de límites tales accesos y en otras plataformas, por lo que presumen que habría algo para el iPhone, sin embargo, no conozco ninguna.

Tal vez usted debe guardar dos copias de la matriz, y compararlas a las diferencias. Imprimir las diferencias. La naturaleza de la "basura" que se introdujo a una de las matrices podría dar una pista sobre dónde vino.

También acaba de pasar por el código que se ejecuta antes de este punto, y volver a leerlo (o mejor aún, que alguien más para leerlo). Es posible detectar un error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top