Question

J'ai un problème assez bizarre dans mon application iPhone qui est, je pense, liée à la mémoire d'obtenir endommagé:

À un moment donné, je dois trier un tableau, que je fais avec -[sortArrayUsingFunction].

Le résultat est pas correct à moins que je soit allouer de la mémoire avec quelque chose comme void *test = malloc(2 * sizeof( int )) avant l'appel de méthode ou avoir, par exemple, un appel à NSLog() (qui est jamais appelé) dans la fonction de tri.

En d'autres termes: le tri ne fonctionne que si j'augmente légèrement la mémoire qui a été utilisé avant d'appeler la fonction de tri. Je pense que c'est parce qu'à un moment donné, la mémoire est corrompue.

Comment déboguer quelque chose comme-vous?

Était-ce utile?

La solution

On dirait que certains de votre code est d'utiliser des objets déjà libérés. Beaucoup de débogage avec l'aide de ce genre d'erreurs est fourni en grande OS X Debugging note technique de magic, en particulier la partie .

Pour votre cas, je désactiver piscines autorelease (réglage de l'environnement NSEnableAutoreleasePool=NO variable) ou utiliser la fonction de zombie (de NSZombieEnabled=YES) pour trouver des endroits où vous envoyez des messages à des objets libérés.

Autres conseils

Essayez d'exécuter votre programme dans le simulateur sous Valgrind:

http://valgrind.org/

Et comment l'utiliser sous le simulateur:

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

Vous devrez peut-être modifier le chemin valgrind dans l'exemple de code en fonction de l'endroit où il est installé.

De telles choses peuvent être un défi pour le débogage. Il existe des outils de détection hors des limites du terrain accès et comme sur d'autres plateformes, donc je suppose qu'il y aurait quelque chose pour l'iPhone, mais je ne connais pas.

Peut-être que vous devriez stocker deux copies du tableau, et de les comparer les différences. Imprimez les différences. La nature de la « junk » qui a été présenté à l'un des tableaux peut donner une idée d'où il vient.

Aussi juste passer par le code qui exécute avant ce point, et relire (ou mieux encore, demandez à quelqu'un d'autre de le lire). Vous pouvez repérer un bug.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top