Я получил странную ошибку 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, что не должно быть слишком большим, за один раз читается только один уровень.
У кого-нибудь есть идеи?