我试图将结构数组的大小加倍。这是我的代码:
#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()中的数组吗?提前谢谢。
答案 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)