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

时间:2012-08-08 16:27:50

标签: 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"));

1 个答案:

答案 0 :(得分:3)

您忘记nil - 终止您的arglist。在C中,函数无法知道你传递了多少个可变参数,所以通常用一个空指针结束一系列指针(以表示没有更多有效的输入。)你的代码似乎正在检查这个({{1当它到达arg = va_arg(args, id)时会是假的,但是你的输入缺失它。