Objective c 数组索引炸毁objc

Objective c 数组索引炸毁objc,objective-c,arrays,Objective C,Arrays,我正在用Xcode 4.6.3编写一个iPhone应用程序 我真的不知道如何问这个问题,但在操作过程中,数组索引从0(在方法中是硬编码的)变为58911(出于某种原因)。这条链条是: - (void)syncInitialState { [self syncState:0]; //value starts hardcoded here } 然后: 在宏状态中: - (NPState *)getState:(int)index { int *singleArray = {&

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

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

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

在宏状态中:

- (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;
}
-(NSPointerArray*)子阵列:(int*)子阵列
{
NSPointerArray*子集=[NSPointerArray StrongObjectsInterArray];

对于(int i=0;i您不能使用
sizeof
来获取
int
数组的长度。您需要在
子数组中添加一个“length”参数:
方法,并使用该参数而不是
sizeof

您不能使用
sizeof
来获取
int
数组的长度。您需要添加一个“length”将参数添加到
subsetFromIntArray:
方法中,并使用该参数而不是
sizeof

不要将错误添加为注释,用它更新您的问题以便更容易阅读。C不是Java。
sizeof(intArray)
返回指针的大小,而不是数组的大小。该表达式将始终返回4(对于具有4字节指针的系统)。如果数组较小,则将寻址air。@HotLicks在
sizeof(array)
中有点混淆,因为当前作用域中的实际堆栈分配数组将实际为您提供其大小(尽管可能不是元素计数)@millimoose-C在这方面和其他许多方面都非常令人困惑(尽管人们必须记住它是一种相当古老的语言。)(人们想知道Java有什么借口,因为它的陷阱只稍微少一点。)@Arkaologic您现在可以编辑您的问题。无需等待将来再进行编辑。不要将错误添加为注释,用它更新您的问题,以便更易于阅读。C不是Java。
sizeof(intArray)
返回指针的大小,而不是数组的大小。该表达式将始终返回4(对于具有4字节指针的系统)。如果您的数组较小,您将寻址air。@HotLicks不是有点让人困惑,因为
sizeof(array)
当前作用域中的实际堆栈分配数组实际上会为您提供其大小(虽然可能不是元素计数)。@millimoose-C在这方面和其他许多方面都非常让人困惑。(尽管人们必须记住,它是一种相当古老的语言。)(人们想知道Java有什么借口,因为它的陷阱只稍微少一点。)@Arkaologic你现在可以编辑你的问题。不需要等到将来再做。太好了。我的问题变成了建立一个完整的参数链,从一个方法传递到下一个方法,只是为了知道原始数组的大小。谢谢C@rmaddy:我猜这个巨大的值当时是以字节为单位的。对不起,尽管你的解决方案很好,但是在其他情况下可能会起作用,在我的情况下很难实现。数组长度是动态的,必须从一开始就知道。我真正需要的是len(list)。这里没有“len(list)”这样的东西,而“list”是一个普通的旧指针,表示长度未知的C数组。但一个可能的选择是使数组“以null结尾”很像一个标准的C字符串。你仍然不能直接得到长度,但至少你可以增加指针,直到得到一个空值。太好了。然后我的问题变成建立一个从一个方法传递到下一个方法的整个参数链,只为了知道原始数组的大小。谢谢C。@rmaddy:我猜这个巨大的值是我所知道的某个大小n字节。很抱歉,虽然您的解决方案很好,可能在其他情况下也能工作,但在我的情况下很难实现。数组长度是动态的,必须从一开始就知道。我真正需要的是len(list)。这里没有“len(list)”和“list”这样的东西是一个普通的旧指针,表示长度未知的C数组。不过,一个可能的选择是将数组设置为“以null结尾”,非常类似于标准C字符串。您仍然无法直接获得长度,但至少可以增加指针,直到获得空值。
- (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;
}