值未正确递增

时间:2012-02-05 22:29:14

标签: objective-c ios

我正在尝试在Objective-C中增加一个变量。这似乎很简单:

dataPos++

但是当我这样做时,价值变得非常奇怪:

dataPos: 1,
dataPos: 2,
dataPos: 3,
dataPos: 4,
dataPos: 12,
dataPos: 185273100`

这是我的代码:

int dataPos = 0;
uint8_t temparray[1];
for (int x=0; x < mapX; x++) {
    for (int y=0; y < mapY; y++) {
        for (int z=0; z < mapZ; z++) {
            [mapdata getBytes:&temparray range:NSMakeRange(dataPos, dataPos+1)];
            dataPos++;
            NSLog(@"dataPos: %d", dataPos);
            map[x][y][z] = temparray[0];
        }   
    }  
}

mapData是一个NSMutableData,其中大约有4194308个字节,map [] [] []是一个uint8_t数组。

我已经尝试清理构建文件夹,在模拟器上构建(值永远不会增加,保持在1)和设备。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

NSMakeRange占据和长度,而不是开始和结束位置。您可能会在temparray中读取太多数据并在此过程中覆盖dataPos。有关详细信息,请参阅Foundation Functions Reference,并将代码重写为:

// snip
[mapdata getBytes:&temparray range:NSMakeRange(dataPos, 1)];
// snip

答案 1 :(得分:1)

你的temparray溢出并覆盖你的整数。

你已经分配了1个字节,并用它调用getBytes,将dataPos+1个字节复制到它。您可能意味着自second parameter to NSMakeRange is the length of the range, not the end position以来使用NSMakeRange(dataPos, 1)