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

nilarglistを終了するのを忘れました。Cでは、関数は渡された可変個引数の数を知る方法がないため、一連のポインターをnullポインターで終了するのが一般的です(有効な入力がなくなったことを示します)。コードはこれをチェックしているように見えます(arg = va_arg(args, id)falseになります) )に達しnilたが、入力が欠落している場合。

于 2012-08-08T16:38:12.513 に答える