我正在尝试创建一个从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"));
答案 0 :(得分:3)
您忘记nil
- 终止您的arglist。在C中,函数无法知道你传递了多少个可变参数,所以通常用一个空指针结束一系列指针(以表示没有更多有效的输入。)你的代码似乎正在检查这个({{1当它到达arg = va_arg(args, id)
时会是假的,但是你的输入缺失它。