我的c ++函数在不应该的时候会破坏变量

时间:2014-01-12 13:42:32

标签: c++ arrays function struct delete-operator

此函数的目的是获取结构,并将数组放大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);

更新:问题解决了!

3 个答案:

答案 0 :(得分:1)

问题是数组指针是按值传递给函数的。这意味着当您将其重新指定为指向其他数组时,此更改不会传播回调用方。

您需要通过指针或引用传递它。

答案 1 :(得分:1)

您按值传递temp。因此,addValueStruct获取自己的副本,并且对其进行的更改在该函数范围之外是不可见的。

答案 2 :(得分:1)

这个问题可能就在这里:

temp = tempStruct;

此处您只更改temp变量的本地副本。如果要修改用于调用的变量,则必须通过引用传递它。