我无法理解如何通过C ++中的引用传递动态数组。
我在这个小的隔离代码示例中重新创建了问题:
#include <iostream>
using namespace std;
void defineArray(int*);
int main()
{
int * myArray;
defineArray(myArray);
/** CAUSES SEG FAULT*/
//cout<<(*(myArray)); //desired output is 0
return 0;
}
void defineArray(int*myArray)
{
int sizeOfArray;
cout<<"How big do you want your array:";
cin>>sizeOfArray;
/** Dynamically allocate array with user-specified size*/
myArray=new int [sizeOfArray];
/** Define Values for our array*/
for(int i = 0; i < sizeOfArray; i++)
{
(*(myArray+i))=i;
cout<<(*(myArray+i));
}
}
答案 0 :(得分:4)
myArray
按值传递,myArray
上的任何修改(例如myArray=new int [sizeOfArray];
)都与myArray
中的原始变量main()
无关仍然悬空。
要通过引用传递,请更改
void defineArray(int*myArray)
到
void defineArray(int*& myArray)
答案 1 :(得分:-1)
这个解决方案毫无希望地复杂化了。您不需要new[]
,指针甚至参考参数。在C ++中,&#34;动态数组的概念&#34;最好由std::vector
表示,您只能将其用作返回值:
#include <iostream>
#include <vector>
std::vector<int> defineArray();
int main()
{
auto myArray = defineArray();
if (!myArray.empty())
{
std::cout << myArray[0] << "\n";;
}
}
std::vector<int> defineArray()
{
int sizeOfArray;
std::cout << "How big do you want your array:";
std::cin >> sizeOfArray;
std::vector<int> myArray;
for (int i = 0; i < sizeOfArray; i++)
{
myArray.push_back(i);
std::cout<< myArray[i] << "\n";
}
return myArray;
}
push_back
将足够智能地工作,而不是一直分配新的内存。如果这仍然与您有关,那么您可以在添加元素之前调用reserve
。