Quelles sont les causes d'erreur “EXC_BAD_ACCESS” lors de la prise en wifi de l'information?
Question
J'obtiens l'erreur suivante
Programme du signal reçu:“EXC_BAD_ACCESS”.
avertissement:check_safe_call:ne pouvait pas restaurer l'image actuelleavertissement:Incapable de restauration précédemment sur l'image sélectionnée.
avertissement:Incapable de restauration précédemment sur l'image sélectionnée.
Mon application est d'obtenir le wifi de l'information
libHandle = dlopen("/System/Library/PrivateFrameworks/ MobileWiFi.framework/MobileWiFi",RTLD_LAZY);
open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");
open(&airportHandle);
bind(airportHandle, @"en0");
Lorsque le code atteint open(&airportHandle)
, Je reçois l'erreur, mais je ne suis pas sûr, car à cette ligne qu'il s'arrête.
Comment puis-je résoudre ce problème?
La solution
Pour toute EXC_BAD_ACCESS erreurs, vous êtes généralement en essayant d'envoyer un message à un libéré de l'objet.L' MEILLEUR pour suivre ces vers le bas, est d'utiliser une NSZombieEnabled.
Cela fonctionne en fait jamais relâcher un objet, mais en les enveloppant comme un "zombie" et la création d'un drapeau à l'intérieur qui dit que normalement, il aurait été libéré.De cette façon, si vous essayez d'accéder à nouveau, il encore savoir ce que c'était avant que vous avez fait l'erreur, et avec ce peu d'informations, vous pouvez revenir en arrière pour voir ce que le problème a été.
Il aide en particulier dans les threads d'arrière-plan lorsque le Débogueur parfois craps les informations utiles.
TRÈS IMPORTANT DE NOTER cependant, c'est que vous avez besoin de 100% assurez-vous que ce n'est que dans votre code de débogage, et non pas votre code de distribution.Parce que rien n'est jamais sorti, votre application sera de fuite et de la fuite et de la fuite.Pour me rappeler de le faire, j'ai mis ce journal dans mon appdelegate:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))
NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");
Si vous avez besoin d'aide pour trouver la ligne exacte, Faites une génération-et-Debug (CMD-Y) au lieu de Construire-and-Run (CMD-R).Lorsque l'application se bloque, le débogueur va vous montrer exactement quelle ligne et en combinaison avec NSZombieEnabled, vous devriez être en mesure de savoir exactement pourquoi.
Autres conseils
EXC_BAD_ACCESS se produit toujours lors de l'accès mémoire que vous avez déjà sorti. Dans votre exemple de code, je ne vois pas où airportHandle
est initialisé ou wheter il est initialisé à tous pour cette question.
S'il a été initialisé mais vous avez juste oublié de poster ce code, vous devriez essayer de vérifier si vous avez relâché la poignée quelque part.
Pour déboguer une telle violation d'accès, il est souvent utile de mettre le drapeau de l'environnement de Vous pouvez le faire avec des instruments FACILEMENT: Voir ce poste vraiment grand: NSZombieEnabled
à YES
. Cela entraînera l'exécution Obj-C pour connecter l'accès à la mémoire libérée à la console. Vous pouvez trouver un
EXC_BAD_ACCESS. se trouve principalement lorsque u sorti tout objet que vous avez besoin en plus future.it ne parvient pas à trouver, mais il y a une solution pour savoir u doit avoir être en mode DEBUG. puis suivez ces liens
http://www.codza.com/how-to- debug-EXC_BAD_ACCESS-sur-iphone
il fonctionne vraiment
Je travaille sur la même chose, et je reçois la même question. Si vous entrez en mode débogage, vous pouvez voir que lorsque nous utilisons open = dlsym(libHandle, "Apple80211Open");
la fonction est égale à 0. encore
Donc, à mon avis, vous êtes à la recherche de la Apple80211Open
dans un cadre qui ne contenait pas cette fonction.
Apple80211Open
est dans le cadre privé Apple80211
qui est obsolète dans> SDK iOS 2.x. L'équivalent dans le cadre de MobileWifi, qui est pour le 3.x et 4.x SDK, est /System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager
au lieu de /System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi