2011-04-04 80 views
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不应该太大,一次只读取一个级别。

有没有人有任何想法?

回答

1

嗯......看来你正在使用未初始化的局部变量。

int a_count = 0; 
int b_count = 0; 
int c_count = 0; 
+0

并且最有可能运行的分析器会显示该问题('Xcode menu - > Build/Build and Analyze') – 2011-04-04 07:00:15

相关问题