我试图编写一个简单的函数,通过检测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];
}
答案 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
。