1
我在设备上出现了一个奇怪的EXEC_BAD_ACCESS错误,它在模拟器中工作。ObjC + Cocos2d:奇怪的设备EXEC_BAD_ACCESS只有
这里是一块相关的代码:
#define MAX_ELEMENT_A 24
#define MAX_ELEMENT_B 24
#define MAX_ELEMENT_C 24
typedef struct {
int pos;
int index;
} A_STRUCTURE;
typedef struct {
int pos;
int index;
} B_STRUCTURE;
typedef struct {
int pos;
int index;
} C_STRUCTURE;
typedef struct {
A_STRUCTURE As[MAX_ELEMENT_A];
int a_count;
B_STRUCTURE Bs[MAX_ELEMENT_B];
int b_count;
C_STRUCTURE Cs[MAX_ELEMENT_C];
int c_count;
} LEVEL;
的结构基本上是一个游戏级别,级别的元素是从地图文件中读取:
LEVEL level;
int a_count;
int b_count;
int c_count;
for (int i = 0; i < map_size; i++) {
MAP_TILE tile = [map nextTile];
if (tile.type == TYPE_A && a_count < MAX_ELEMENT_A) {
level.As[a_count++] = tile.data;
} else {
// do the same for element B and C
}
}
level.a_count = a_count;
level.b_count = b_count;
level.c_count = c_count;
return level;
每次地图瓦片被读,我检查它的类型(A,B或C)并将它们放入相对数组;我还检查特定元素类型的数量是否超过了其最大值(数组大小)。
问题是,使用上面的MAX_ELEMENT_ *值(即全部24),在模拟器或设备中运行没有问题,但是如果我将它们中的任何两个从24更改为64,则在运行时获得EXEC_BAD_ACCESS只有设备。我试图找到它发生的地方,但没有成功,读完一个关卡之后,它的数据被传递到一个Box2d世界,错误发生在世界开始滴答之前,我想这可能是由于64内存太大和24是好的,但我怀疑,因为我检查使用sizeof(LEVEL),并得到2 ***为64不应该太大,一次只读取一个级别。
有没有人有任何想法?
并且最有可能运行的分析器会显示该问题('Xcode menu - > Build/Build and Analyze') – 2011-04-04 07:00:15