结构数组加倍算法C ++

时间:2016-01-30 23:41:43

标签: c++ arrays struct

我试图将结构数组的大小加倍。这是我的代码:

#include <iostream>

using namespace std;

struct MyStruct{
    int num;
};

void arrayfunc(struct MyStruct arr[]){
    MyStruct *temp_arr = new MyStruct[6];

    for(int i=0; i<3; i++){
        temp_arr[i].num = arr[i].num;
    }

    temp_arr[3].num = 10;

    delete []arr;

    arr = temp_arr;

    }

int main(){
    MyStruct* arr = new MyStruct[3];

    for(int i=0; i<3; i++){
        arr[i].num = i;
    }

    arrayfunc(arr);

    cout << arr[3].num << endl;

    return 0;
}

每当我的代码被放回到我的主脚本中时,它就会很好地运行该函数,但随后崩溃,我想在尝试存储更多信息时。我尝试将指针返回到数组,但无法使其工作。不能改变动态指针也改变main()中的数组吗?提前谢谢。

3 个答案:

答案 0 :(得分:2)

问题是您按值传递数组地址。

arrayfunc()中执行arr = temp_arr;时,您只更改函数本地参数的值。 main()中的原始arr保持不变。

您应该通过引用将参数传递给您按照以下方式工作:

void arrayfunc(struct MyStruct* &arr){
...
} 

答案 1 :(得分:0)

void arrayfunc(struct MyStruct arr[])  

调用此函数时,您将指向第一个元素的指针的副本传递给它。数据本身不会被复制,但指针是。

现在,您可以更改函数中的指针,但main仍将是旧指针。使用参考:

void arrayfunc(struct MyStruct &arr[])  

std::vector ...

顺便说一下,你错过了delete[]

答案 2 :(得分:0)

arr = temp_arr;

此行是您的代码无法按照您的意愿执行的操作。指针变量只是一个带有一些基本类型信息的数字无符号值。

当你将arr设置为其他内容时,你改变了地址,而不是你传递给函数的地址所引用的数据。

你可以做到

arrayFunc(struct MyStruct **arr)

调用它
arrayFunc(&arr)

并在

之类的函数中使用它
(*arr)[i].num

并删除它

delete[] (*arr)