变量参数列表 - 内存管理错误



我正在尝试创建一种方法来快速轻松地从va_list创建 NSArray,但是,当我运行该方法时,由于某处内存管理不佳,我收到了exc_bad_access,尽管我无法确定这个地方在哪里。

请您看一下代码并告诉我发生这种情况的位置和原因。

提前感谢,

麦克斯。

NSArray *arrayCreate(id firstObject, ...) {
    NSMutableArray *objects = [NSMutableArray array];
    [objects addObject:firstObject];
    va_list args;
    va_start(args, firstObject);
    id arg;
    while ((arg = va_arg(args, id))) {
        [objects addObject:arg];
    }
    va_end(args);
    return [objects copy];
}

用法(只是为了测试它是否正常工作):

NSLog(@"%@", arrayCreate(@"1", @"2", @"3", @"4"));

你忘了nil-终止你的arglist。在 C 语言中,函数无法知道你传递了多少可变参数,因此通常使用空指针结束一系列指针(以指示不再有效的输入)。您的代码似乎正在检查这一点(arg = va_arg(args, id)当它到达nil时将是假的),但您的输入缺少它。

最新更新