我收到以下错误

程序接收信号:“EXC_BAD_ACCESS”。
警告:检查安全调用:无法恢复当前帧

警告:无法恢复先前选择的帧。
警告:无法恢复先前选择的帧。

我的应用程序是获取wifi信息

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");

当代码达到 open(&airportHandle), ,我收到错误,但我不确定,因为在这一行它停止了。

我该如何解决这个问题?

有帮助吗?

解决方案

对于任何 EXC_BAD_ACCESS 错误,您通常尝试向已释放的对象发送消息。这 最好的 追踪这些的方法是使用 NSZombie启用.

这是通过从不真正释放一个对象,而是通过将其包装为“僵尸”并在其中设置一个标志来表示它通常会被释放来实现的。这样,如果您尝试再次访问它,它仍然知道您犯错误之前的情况,并且通过这一点信息,您通常可以回溯以查看问题所在。

当调试器有时会放弃任何有用的信息时,它在后台线程中尤其有用。

非常重要的注意事项 然而,您需要 100% 确保这仅出现在您的调试代码中,而不是您的分发代码中。因为没有任何东西被发布,所以你的应用程序将会泄漏、泄漏、泄漏。为了提醒我这样做,我将此日志放入我的应用程序委托中:

if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))
  NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");

如果您需要帮助找到确切的行,请执行“构建并调试”(CMD-Y),而不是“构建并运行”(CMD-R)。当应用程序崩溃时,调试器将准确地显示哪一行,并结合 NSZombieEnabled,您应该能够找出确切的原因。

其他提示

EXC_BAD_ACCESS访问存储器时,你已经发布总是发生。在你的示例代码中,我看不到的地方airportHandle被初始化,或者wheter它在所有的初始化为这一问题。

如果已经初始化,但你只是忘了张贴的代码,你应该尝试检查,如果你的地方释放手柄。

要调试这样的访问冲突,通常是设置NSZombieEnabled环境标志YES有用。这将导致对象 - C运行时登录访问发布内存到控制台。你可以找到的关于如何一起使用这些信息与仪器找到你的问题完全教程

EXC_BAD_ACCESS。主要发现当u释放你进一步需要future.it任何对象无法找到,但有解决方案,找出ü必须要在调试模式。然后按照这些链接

http://www.codza.com/how-to-调试EXC_BAD_ACCESS-ON-iphone

真的作品

我工作的同样的事情,我也得到了同样的问题。如果你在调试模式下输入,你可以看到,当我们使用open = dlsym(libHandle, "Apple80211Open");功能还是等于0。

所以,在我看来,你正在寻找一个框架的Apple80211Open其中不包含此功能。

Apple80211Open是在其中在>的iOS 2.x的SDK过时的Apple80211私人框架。在MobileWifi框架的等效,这对于3.x和4.x SDK被/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager代替/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top