У меня проблема с одной из моих функций, я работаю над простым редактором карты тайлов и пытаюсь реализовать трехмерный массив для отслеживания тайлов (x, y, layer). До этого у меня был одномерный массив, в котором все плитки были только что перечислены последовательно:
bool Map::OnLoad(char* File) {
TileList.clear();
FILE* FileHandle = fopen(File, "r");
if(FileHandle == NULL) {
return false;
}
for(int Y = 0;Y < MAP_HEIGHT;Y++) {
for(int X = 0;X < MAP_WIDTH;X++) {
Tile tempTile;
fscanf(FileHandle, "%d:%d ", &tempTile.TileID, &tempTile.TilePassage);
TileList.push_back(tempTile);
}
fscanf(FileHandle, "\n");
}
fclose(FileHandle);
return true;
}
Это в основном читает строки из файла, который выглядел как:
2:1 1:0 3:2...
Где первое число указывает на плитку, а второе - на проходимость плитки. Вышеприведенная функция работает . Мои 3D-массивы также правильно построены, я протестировал их с помощью простых назначений и вызова значений из них. Функция, которая доставляет мне проблемы, следующая (обратите внимание, что добавлено число 2, т.е. OnLoad2 (), чтобы я мог сохранить старые переменные и функцию без изменений до тех пор, пока прототип не заработает):
bool Map::OnLoad2(char* File) {
TileList2.clear();
FILE* FileHandle2 = fopen(File, "r");
if(FileHandle2 == NULL) {
return false;
}
for(int Y = 0;Y < MAP_HEIGHT;Y++) {
for(int X = 0;X < MAP_WIDTH;X++) {
Tile tempTile;
fscanf(FileHandle2, "%d:%d ", &tempTile.TileID, &tempTile.TilePassage);
TileList2[X][Y][0] = tempTile;
}
fscanf(FileHandle2, "\n");
}
fclose(FileHandle2);
return true;
}
Хотя эта функция не запускает компилятор для сообщения об ошибках, как только приложение запускается, оно зависает и вылетает. Для дополнительной информации MAP_WIDTH и MAP_HEIGHT установлены в 40 каждый , а трехмерный массив был построен следующим образом:
TileList2.resize(MAP_HEIGHT);
for (int i = 0; i < MAP_HEIGHT; ++i) {
TileList2[i].resize(MAP_WIDTH);
for (int j = 0; j < MAP_WIDTH; ++j)
TileList2[i][j].resize(3);
}
Буду признателен, если вы укажете мне, что мне нужно исправить, насколько я знаю, что я испортил структуру цикла for, поскольку трехмерный массив инициализируется и работает правильно. Спасибо за вашу помощь!