C ++动态数组“丢失”数据

时间:2013-04-05 14:41:33

标签: c++ arrays dynamic

首先,这是我的声明和初始化:

int** GameField = 0;
GameField = new int*[mapsize];                  
for(int i = 0; i < mapsize; i++)
        GameField[i] = new int[mapsize];

for(int j = 0; j < mapsize; j++)                
        for(int i = 0; i < mapsize; i++)
            GameField[i][j] = 0;

现在我正在尝试使用简单的命令插入数据:

if(!(Player1.find(Move) == Player1.end()) && iter>0)            
        {
            GameResult=1;                                       
        }else
        {
            Player1[Move] = 1;                          
            GameField[Move.first][Move.second]=1;               
            if(WinCheck(Player1, Move, x, mapsize))
                GameResult = 1;
        }

同时我将数据插入STL地图。 Visual Studio没有动态数据的本机显示,因此我无法查看表的内容。试着看着记忆,但很难理解它。程序的一部分似乎一直在工作,直到某一点:

    bool CheckIfMovePossible(int **GameField, pair <int,int> &Move, int MapSize)
{
    int x = Move.first;
    int y = Move.second;
    bool Neighbour = false;

    if(GameField[modulo(x+1,MapSize)][y]==(1||2))                       // po prawej
        Neighbour = true;

    if(GameField[modulo(x+1,MapSize)][modulo(y+1,MapSize)]==(1||2))
        Neighbour = true;

    if(GameField[modulo(x+1,MapSize)][modulo(y-1,MapSize)]==(1||2))
        Neighbour = true;

    if(GameField[x][modulo(y+1,MapSize)]==(1||2))                       // x
        Neighbour = true;

    if(GameField[x][modulo(y-1,MapSize)]==(1||2))
        Neighbour = true;

    if(GameField[modulo(x-1,MapSize)][modulo(y+1,MapSize)]==(1||2))     // po lewej
        Neighbour = true;

    if(GameField[modulo(x-1,MapSize)][y]==(1||2))
        Neighbour = true;

    if(GameField[modulo(x-1,MapSize)][modulo(y-1,MapSize)]==(1||2))
        Neighbour = true;

    return Neighbour;

}

应该检查容器中是否有任何相邻数据。我手动计算这些值并使用调试器,并且在每种情况下,程序的行为就像请求的位置中没有数据一样,而它必须存在于地图中。任何信息将不胜感激。

2 个答案:

答案 0 :(得分:2)

看来你想用这样的代码做什么

if(GameField[modulo(x+1,MapSize)][y]==(1||2))  

是这个。

if ( GameField[modulo(x+1,MapSize)][y] == 1 ||
     GameField[modulo(x+1,MapSize)][y] == 2)  

与您的问题无关,似乎您的逻辑做了很多工作 之后确定该函数将返回true

一旦确定这是返回值,请考虑使用else if或使用代码return true

答案 1 :(得分:2)

你的if语句应该是这样的:

if(GameField[modulo(x+1,MapSize)][y] == 1 ||
   GameField[modulo(x+1,MapSize)][y] == 2)                       // po prawej
    Neighbour = true;

您也可能希望保存模数值,以免频繁重新计算它们。