0

我正在尝试创建一种从 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"));
4

1 回答 1

3

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

于 2012-08-08T16:38:12.513 回答