我正在尝试创建一种方法来快速轻松地从 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/