我正在尝试创建一种方法来快速轻松地从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
时将是假的),但您的输入缺少它。