我正在尝试在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)和设备。
非常感谢任何帮助。
答案 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)
。