为什么Folloing代码在2010年Visual Studio(X64应用程序)中抛出非法指令例外

Why does the folloing code throw an illegal instruction exception in visual studio 2010 (x64 application)?

本文关键字:非法 指令 应用程序 X64 代码 Folloing 2010年 Visual Studio 为什么      更新时间:2023-10-16

我有一个2D游戏,其中每个位置都用3个坐标(x = width,y = height,floes = z)

我尝试编写一个功能,从一开始到结束位置,都会为我列出所有地板的列表。

和以下代码正在抛出"非法指令" - 例外。我很困惑:

std::list<Tile*> Map::getTileArea(Position positionStart, Position positionEnd)
{
    std::list<Tile*> tileAreaList;
if(positionStart.x > positionEnd.x) {
    std::swap(positionStart.x, positionEnd.x);
}
if(positionStart.y > positionEnd.y) {
    std::swap(positionStart.y, positionEnd.y);
}
if(positionStart.z > positionEnd.z) {
    std::swap(positionStart.z, positionEnd.z);
}

    for(int _x = positionStart.x; _x < positionEnd.x; _x++) {//<-Exception occurs here.
        //Procedurestepping told me that but I cannot find an explanation for this.
        for(int _y = positionStart.y; _y < positionEnd.y; _y++) {
        for(int _z = positionStart.z; _z < positionEnd.z; _z++) {
            Tile* tile = getTileByPosition(Position(_x, _y, _z));
            if(tile != NULL) {
                tileAreaList.push_back(tile);
                }
            }
        }
    }
    return tileAreaList;
}

有人可以帮我吗?谢谢。

看起来像是一个切割糊错误:

if(positionStart.y > positionEnd.y) {
     std::swap(positionStart.y, positionEnd.y);
}
if(positionStart.z > positionEnd.z) {
    std::swap(positionStart.z, positionEnd.z);
}