IOS:碰撞在64位设备(ios:crash in 64 bit device)

2019-10-22 16:15发布

有人可以解释为什么我的应用程序,出现以下错误崩溃:

EXC_BAD_ACCESS(代码= 1,地址= ...)

此崩溃只发生在64个器件。 我无法弄清楚。

  - (NSString *)getIPAddress
    {
        NSString *address = nil;
        struct ifaddrs *interfaces = NULL;
        struct ifaddrs *temp_addr = NULL;
        int success = 0;

        // retrieve the current interfaces - returns 0 on success
        success = getifaddrs(&interfaces);
        if (success == 0)
        {
            // Loop through linked list of interfaces
            temp_addr = interfaces;
            while(temp_addr != NULL)
            {
                if(temp_addr->ifa_addr->sa_family == AF_INET)// crashes here
                {
                    // Check if interface is en0 which is the wifi connection on the iPhone
                    if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"])
                    {
                        // Get NSString from C String
                        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; // crash also here
                    }
                }
                temp_addr = temp_addr->ifa_next;
            }
        }
        // Free memory
        freeifaddrs(interfaces);
        return address;
    }

谢谢!

Answer 1:

根据该文件 :

该ifa_addr字段引用无论是接口或接口的链路层地址的地址,如果存在的话,否则是NULL。 (该ifa_addr字段的上sa_family字段应咨询以确定ifa_addr地址的格式。)

这是有可能的原因是,没有你的64位设备上的接口ifa_addr填充字段。

为了解决您的问题,检查空ifa_addr 。 我还建议打破循环,因为你一旦找到完成en0

...
while(temp_addr != NULL)
{
    if(temp_addr->ifa_addr != NULL && temp_addr->ifa_addr->sa_family == AF_INET)
    {
        // Check if interface is en0 which is the wifi connection on the iPhone
        if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"])
        {
            // Get NSString from C String
            address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
            break;
        }
    }
    temp_addr = temp_addr->ifa_next;
}
...


文章来源: ios:crash in 64 bit device