此函数的目的是获取结构,并将数组放大1.通过将数组复制到临时数组,删除并重新创建具有更大尺寸的原始数据来实现此目的。我的问题是,当我运行该函数时,结构中的所有值都变为'-17891602'。 如果我错了,请纠正我,但我相信这是在删除变量时显示的值?我无法弄清楚这个问题。但这是定义。
void Array::addValueStruct(int id, int size, int type, int compareValue, StoredData temp[])
{
//struct
StoredData* tempStruct = new StoredData [arrSize+1];
for (int i=0;i<arrSize;i++)
{
tempStruct[i] = temp[i];
}
arrSize = arrSize + 1;
delete [] temp;
temp = tempStruct;
temp[arrSize-1].id = id;
temp[arrSize-1].size = size;
temp[arrSize-1].type = type;
temp[arrSize-1].compareValue = compareValue;
}
另外,不确定这是否有用,但函数调用。
test.addValueStruct(5,5,5,5,testData);
更新:问题解决了!
答案 0 :(得分:1)
问题是数组指针是按值传递给函数的。这意味着当您将其重新指定为指向其他数组时,此更改不会传播回调用方。
您需要通过指针或引用传递它。
答案 1 :(得分:1)
您按值传递temp
。因此,addValueStruct
获取自己的副本,并且对其进行的更改在该函数范围之外是不可见的。
答案 2 :(得分:1)
这个问题可能就在这里:
temp = tempStruct;
此处您只更改temp
变量的本地副本。如果要修改用于调用的变量,则必须通过引用传递它。