开发者

For loop for reading strings from a file into a 3D array

I'm having a problem with one of my functions, I'm working on a simple tile map editor, and I'm trying to implement a 3D array to keep track of tiles (x,y, layer). Before this I had a 1D array where all the tiles were just listed sequencially:

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;
}

This basically read strings from the file which looked like:

2:1 1:0 3:2...

Where the first number states the tileID and the second one states the Tile passability. The above function works. My 3D arrays are also correctly constructed, I tested them with simple assignments and calling values out of it. The function that gives me problems is the following (please note that the number 2 i.e. OnLoad2() was added so I can keep the old variables and the function untouched until the prototype is working):

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;
}

While this function doesn't trigger the compiler to report any errors, as soon as the application starts, it freezes up and crashes. For additional information MAP_WIDTH and MAP_HEIGHT are set to 40 each and the 3D array was constructed like this:

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);
}

I would appreciate it if you could point me out what do I need to fix, as far as I know I must have messed up the for loop structure, as the 3D array initializes and works properly. Thank you for your help!


TileList2.clear();

This line reinitializes TileList2, so it is back to a zero-length vector. Delete that line, and you will probably be okay.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜