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

Objective c 变量参数列表-内存管理错误,objective-c,ios,nsarray,variadic-functions,Objective C,Ios,Nsarray,Variadic Functions,我正在尝试创建一个方法,以便从va_列表快速轻松地创建NSArray,但是,当我运行该方法时,由于某个地方的内存管理不好,我收到了一个exc_bad_访问,尽管我无法确定这个地方在哪里 请你看一下代码,告诉我发生这种情况的地点和原因 提前感谢 马克斯 用法(只是为了测试它是否工作): 您忘记了nil-终止arglist。在C语言中,函数无法知道传递了多少个可变参数,因此通常会用空指针结束一系列指针(表示不再有有效的输入)。代码似乎正在对此进行检查(arg=va_arg(args,id)在达到ni

我正在尝试创建一个方法,以便从va_列表快速轻松地创建NSArray,但是,当我运行该方法时,由于某个地方的内存管理不好,我收到了一个exc_bad_访问,尽管我无法确定这个地方在哪里

请你看一下代码,告诉我发生这种情况的地点和原因

提前感谢

马克斯

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


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

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

告诉我们您在哪里调用
arrayCreate()
。另外,为什么不直接使用
[[NSArray alloc]initWithObjects:
?当然,我添加了用法。告诉我们在哪里调用
arrayCreate()
。另外,为什么不直接使用
[[NSArray alloc]initWithObjects:
?当然,我添加了用法。谢谢,我只是在您回答问题时实现了这个。但是,我在函数声明的末尾添加了
NS\u REQUIRES\u NIL\u TERMINATION
,但是它返回了一个错误,请求添加一个括号:
NSArray*arrayCreate(id firstObject,…NS\u REQUIRES\u NIL\u TERMINATION)
NS\u REQUIRES\u NIL\u TERMINATION超出了括号。谢谢,当你回答这个问题时,我正在实施这个。但是,我在函数声明的末尾添加了
NS\u REQUIRES\u NIL\u TERMINATION
,但是它返回了一个错误,请求添加一个括号:
NSArray*arrayCreate(id firstObject,…NS\u REQUIRES\u NIL\u TERMINATION)
NS\u REQUIRES\u NIL\u TERMINATION超出了括号。
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"));