【问题标题】:How to check an empty space (NULL) in double pointers如何检查双指针中的空白空间(NULL)
【发布时间】:2011-04-06 13:58:05
【问题描述】:

我正在尝试使用“if”条件来检查对象的位置是否为空。我为此使用双指针。请看下面的代码:

void show_room :: buy_car(int clmn, int row)
{
    int row = row;
    int clmn = clmn;
    string car_door_col;
    string temp1;
    float temp2;
    int temp3;
    int n=0, i;
    this->HBM = new show_room*[3];

    for(int i=0; i<3; i++)
    {               
        this->HBM[i] = new show_room[4];
    }

    for(int j=0; j<row; j++)
    {
        if(this->HBM[clmn][row] == NULL)
        {
        }
    }
}

在这个循环中:

for(int j=0; j<row; j++)
{
    if(this->HBM[clmn][row] == NULL)
    {

    }
}

我正在尝试检查 [clmn][row] 处是否有对象,我为此使用 NULL,这是错误的。我应该如何实现这一点。请在这方面帮助我。

【问题讨论】:

  • 你为什么要这样做:int row = row; int clmn = clmn;
  • @meagar....我知道这是错误的.....请忽略它..
  • 仅供参考,在您的检查中,您可能希望检查 j 而不是 row,因为 row 不会改变,您最终每次都会检查同一个对象。

标签: c++ arrays dynamic memory-management double-pointer


【解决方案1】:

假设您已经将 HBM 的元素初始化为 0,并且您记得在删除它们指向的对象后将它们重置为 0,您可以这样做:

if(this->HBM[clmn][row]) {
    // ... 
}

【讨论】:

  • 请考虑这种情况...... HBM[0][2] 有东西,而 HBM[0][1] 是空的。现在我正在尝试实现一些东西来检查 HBM[0][1] 是否为空。请帮忙。
  • @Spoilt 那么到底是什么问题呢?完全按照我的建议,循环 HBM 并使用 if 测试每个元素。这会告诉你元素是否为空。
  • 那么支票在哪里?你写的Wat会检查NULL条件吗?对不起,我很笨,但仍然请帮助..
  • @Spoilt if 是支票。这就是if 语句的含义。 if 的主体仅在存在对象 HBM[clmn][row] 时才会执行。否则,条件评估为 false 并跳过 if 的正文。
【解决方案2】:

问题在于new show_room[4] 没有创建四个指向 show_rooms 的指针,而是连续创建了四个 show_rooms。

【讨论】:

    【解决方案3】:

    按照您的编写方式,您只是在构造一个二维数组show_room[3][4](带有动态存储)。调用new 意味着每个对象都被构造出来,所以没有“缺失值”或“空格”。

    当您说HBM[i][j] 时,可能会发生以下两种情况之一:

    • i &lt; 3 和 j &lt; 4,并且您获得对有效 show_room 对象的引用,或者
    • 您会招致未定义的行为。

    不会发生其他事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      相关资源
      最近更新 更多