0

我正在 Xcode 4.6.3 中编写一个 iPhone 应用程序。

我真的不知道怎么问这个问题,但是在操作过程中,由于某种原因,数组索引从在方法中硬编码的 0 变为 58911。链条是:

- (void)syncInitialState
{
    [self syncState:0]; //value starts hardcoded here
}

然后:

- (void)syncState:(int)index
{
    self.state = [macrostate getState:index];
    [self syncState];
}

在宏观状态:

- (NPState *)getState:(int)index
{
    int *singleArray = {&index};
    NSPointerArray *pointerArray = [self subsetFromIntArray:singleArray];
    return (__bridge NPState *)[pointerArray pointerAtIndex:0]; //only one object
}

最后:

- (NSPointerArray *)subsetFromIntArray:(int *)intArray
{
    NSPointerArray *subset = [NSPointerArray strongObjectsPointerArray];
    for (int i=0; i<sizeof(intArray); i++) {
        [subset addPointer:[pointerArrayOfStates pointerAtIndex:intArray[i]]]; //fails
    }
    return subset;
}

显然它失败了,因为 58911 超出了指针数组的范围。我以前从未见过这种情况。谢谢阅读。

知道错误可能会有所帮助:*由于未捕获的异常“NSRangeException”而终止应用程序,原因:'-[NSConcretePointerArray pointerAtIndex:]: attempt to access pointer at index 58911 beyond bounds 4' * * First throw call stack: (0x1caa012 0x10e7e7e 0x1ca9deb 0xb1c1ab 0xd8ae 0xd7a5 0x47c6 0x485e 0x567f 0x5d95 0x2d3f 0x10d1c7 0x10d232 0x5c3d5 0x5c76f 0x5c905 0x65917 0x29c5 0x29157 0x29747 0x2a94b 0x3bcb5 0x3cbeb 0x2e698 0x1c05df9 0x1c05ad0 0x1c1fbf5 0x1c1f962 0x1c50bb6 0x1c4ff44 0x1c4fe1b 0x2a17a 0x2bffc 0x26fd 0x2625)libc++abi.dylib:终止调用抛出异常

4

1 回答 1

3

你不能sizeof用来获取int数组的长度。您需要在subsetFromIntArray:方法中添加一个“长度”参数并使用它来代替sizeof.

于 2013-07-12T16:46:52.113 回答