C++异常值重置

C++ weird value resetting

本文关键字:异常 C++      更新时间:2023-10-16

使用下面的代码时,它将Tile对象的x值设置为i,将y值设置为j。但如果我只打印y值,则x值始终为4095。

代码:

主要代码:

Tile * tiles = new Tile[4096,4096];
    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
            tiles[i,j].x = i;
            tiles[i,j].y = j;
        }
    }
    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
                cout << "X (Should be " <<i<<"): "<< tiles[i,j].x << " " << "Y (Should be " <<j<<"): "<< tiles[i,j].y << "n";
        }
    }

Tile.h:

#pragma once
class Tile
{
    public:
        int x, y;
};

您没有正确使用数组:

i,j将始终返回j,因为这是逗号运算符的结果。

Tile** tiles = new Tile*[4096];
for(int i = 0; i < 4096; i++)
    tiles[i] = new Tile[4096];
    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
            tiles[i][j].x = i;
            tiles[i][j].y = j;
        }
    }
    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
                cout << "X (Should be " <<i<<"): "<< tiles[i][j].x << " " << "Y (Should be " <<j<<"): "<< tiles[i][j].y << "n";
        }
    }

   // Destruction! DON'T FORGET!
   for(int i = 0; i < 4096; i++)
       delete[] tiles[i];
   delete[] tiles; 

如果您从逗号运算符计算值,您的原始代码将是:

Tile * tiles = new Tile[4096]; // returned last 4096
    for(int i = 0; i< 4096;i++)
    {
        for(int j = 0;j< 4096;j++)
        {
            tiles[i,j].x = i; // the same as tiles[j].x = i;
            tiles[i,j].y = j; // the same as tiles[j].y = j;
        }
    }
///...