为对象指针数组的每个NULL索引创建新对象

时间:2017-12-08 02:49:12

标签: c++ visual-studio oop

我试图编写一个简单的函数,通过检测NULL索引和创建新对象来填充对象指针数组。

Wire *wireArray[MAX_WIRES];//The array is of class "Wire" and returns a pointer to a wire object. 

Wire *getWirePtrFromWireNum(int num); //the function gets the index to the array and returns a NULL if empty and the pointer if it is not NULL. 

在下面的if语句中,我尝试将索引传递给函数,并在该数字的数组为NULL时创建一个新的Wire对象。

if (getWirePtrFromWireNum(wirenum) == NULL) {

                Wire newWire; 
                wireArray[wirenum] = &newWire; 

            }

getWirePtrFromWireNum的函数只检查NULL索引并返回指针(如果它已被占用)。

Wire * Circuit::getWirePtrFromWireNum(int num)
{
    if (wireArray[num] == NULL) {

        return NULL; 
    }

    else {

        return wireArray[num]; 

    }

}

当我使用多个输入进行测试时,它根本不会输入第一个if语句。我觉得不需要将指针数组初始化为NULL,但我觉得应该仍然认为第一个索引应该是空的。代码不会返回任何错误,但该函数似乎没有做它应该做的事情。我的错误可能来自哪里?

编辑:

for (int i = 0; i < MAX_WIRE; i++) {

    wireArray[i] == NULL; 
}

固定功能:

Wire * Circuit::getWirePtrFromWireNum(int num)
{
    if (wireArray[num] == NULL) {

        wireArray[num] = new Wire; 
        return wireArray[num]; 

    }

    return wireArray[num]; 


}

1 个答案:

答案 0 :(得分:0)

if (wireArray[num] == NULL) {

    return NULL; 
}

else {

    return wireArray[num]; 

}

这些陈述并不符合您的想法。您检查wireArray == NULL,但默认情况下不设置为NULL。实际上,整个检查是多余的,因为它可以简化为return wireArray[num]。您需要将数组中的所有元素初始化为NULL;它们的默认值是上次使用内存位置时遗留的任何位,并且未定义。

if (getWirePtrFromWireNum(wirenum) == NULL) {

            Wire newWire; 
            wireArray[wirenum] = &newWire; 

}

你这里有一个悬垂的指针。在if语句之后销毁newWire