Quelles sont les causes d'erreur “EXC_BAD_ACCESS” lors de la prise en wifi de l'information?

StackOverflow https://stackoverflow.com/questions/1727417

  •  19-09-2019
  •  | 
  •  

Question

J'obtiens l'erreur suivante

Programme du signal reçu:“EXC_BAD_ACCESS”.
avertissement:check_safe_call:ne pouvait pas restaurer l'image actuelle

avertissement: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?

Était-ce utile?

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 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

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