接收数据时GCDAsyncUdpSocket抛出malloc错误

时间:2015-07-30 22:38:08

标签: objective-c autorelease nsautoreleasepool gcdasyncsocket gcdasyncudpsocket

我正在使用GCDAcyncUDPSocket来接收数据。在下面的代码中,我创建了一个(时间戳,数据)元组并将其添加到另一个数组中。这是我的代码:

- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext
{
dispatch_queue_t bg_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
NSString *msg = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSTimeInterval t = [self getTime];
if (msg)
{
    [self.activityQueue.activityQueue enqueue:@"1"];
    dispatch_async(bg_queue, ^{
        NSData * d = [data copy];
            [self addRecvJitter:t withData:d];
        d= nil;
    });
}
}

- (void)addRecvJitter:(NSTimeInterval)t withData:(NSData *)data
{

NSString * add = [NSString  stringWithFormat:@"%f",( t - self.jitterOrigin)];
NSArray * addToList = [[NSArray alloc] initWithObjects:add,data, nil];
[_rcvdJitter addObject:addToList];
}

我收到以下错误 malloc: *对象0x7a9c2820的错误:双倍免费 * 在malloc_error_break中设置断点以在此行调试" [_ rcvdJitter addObject:addToList];"

我可以获得一些帮助吗?

由于

1 个答案:

答案 0 :(得分:0)

这看起来像是一个线程问题。我假设在主线程上调用didReceiveData,并且您将工作分派到另一个后台线程。

您是否尝试删除d= nil;

此外,使用收到的数据创建msg只是为了检查是否有效,然后复制数据并再次使用。

你想要达到什么目标?

关于调试助手消息,您应该添加符号断点并将类型设置为malloc_error_break。检查Vinzzz在这里回答How to “set a breakpoint in malloc_error_break to debug"