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

标签 objective-c ios nsarray variadic-functions

我正在尝试创建一种方法来快速轻松地从 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 时将为 false) 但您的输入丢失了它。

关于objective-c - 变量参数列表 - 内存管理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11868961/

相关文章:

iOS 8 Swift - 使用核心数据实现共享表

ios - dismissViewControllerAnimated 导致空屏幕

json - Swift 将创建的结构实例返回给函数

iphone - 使用(多个?)标准对 NSArray 进行排序——年龄小于 10 岁的人订购错误

ios - 如果键盘阻塞了 TextView ,则移动 UIView

ios - Xcode 7 特定的静态框架警告

ios - 如何拥有具有两种不同单元格类型的 UITableView 并以编程方式设置每个单元格布局,而不是通过 Storyboard?

ios - 用平行线填充 UIBezierPath

ios - 没有Facebook App不会显示FBWebDialogs presentFeedDialogModallyWithSession

Objective-C:Getter 不应该用于副作用编译器警告