如何检查数组中的索引是否为空

时间:2018-03-29 05:34:18

标签: c++

我正在为Uni中的C ++类简介制作一个小型OpenGL程序。我有一个完整的程序,但我想稍微改变它以使其更加独特。我有一个Cube类:

class Cube {
public:
    Cube(Mesh* mesh, Texture2D* texture, float x, float y, float z);
    ~Cube();
    void Draw();
    void Update(float rSpeed);
    Vector3 position;
private:
    GLfloat rotationSpeed;
    Vector3 rotationVector;
    Mesh* _mesh;
    Texture2D* _texture;
};
然后我创建了一个Cube类型的数组:

Cube* cubes[CUBE_AMOUNT];

然后我用数据填充此数组的每个索引,以便稍后在程序中在屏幕上绘制多维数据集:

for (int i = 0; i < CUBE_AMOUNT; i++) {
    float x = ((rand() % 400) / 10.0f) - 20.0f;
    float y = ((rand() % 200) / 10.0f) - 10.0f;
    float z = -(rand() % 1000);
    if (i % 2 == 1) {
        cubes[i] = new Cube(cubeMesh, textureStars, x, y, z);
    }
    else {
        cubes[i] = new Cube(cubeMesh, texturePenguins, x, y, z);
    }
}

有了这个我要添加到程序中的新东西,我想检查cube []的索引是否已经填充了数据。但是我在运行时不断遇到异常。我试图检查cubes [i]是否等于nullptr,并尝试检查它是否也是NULL,但似乎都不匹配。

对于我使用的术语中的任何错误,我们深表歉意。 C ++的新手,并且在此之前只是来自Python,它令人困惑!

解决方案:

当我创建数组时,我将其更改为Cube* cubes[CUBE_AMOUNT] = { NULL },现在检查数组时cubes[i] == NULL

3 个答案:

答案 0 :(得分:1)

如果cubes不是全局变量,您可以使用:

Cube* cubes[CUBE_AMOUNT] = {};

将所有元素初始化为nullptr

您也可以使用:

std::vector<std::unique_ptr<Cube>> cubes(CUBE_AMOUNT);

消除了必须在代码中释放动态内存的负担。

在任何一种情况下,都可以使用:

if ( cubes[index] )
{
   // Got a valid pointer. Use it.
}

答案 1 :(得分:0)

您的cubes变量不会使用null_ptr自动初始化。直到你用null_ptr或好的指针填充它,它最初指向随机垃圾。

答案 2 :(得分:0)

我认为这会起作用

    //This bit should check if theres anything stored currently.
            cout << "\nWhich Slot would you like to store the informaton in ?(1-10)";
            cin >> i;
        i--;
        if (information[i] != NULL){
        // Already written 
            cout << "THERES SOMETHING HERE";
        }
    else{
      cout << "\nEMPTY!!!!!!!!!";
       }