我的家庭作业分配如下。如果我误读了什么。
“在一个称为PointerPractice.cpp文件,写一个函数调用concatArrays采用两个INT阵列 作为参数并连接两个阵列成第三较大的阵列,该函数创建。 该函数应该只使用指针算法(无数组符号),并应的指针返回到 新创建的数组。该函数应具有以下原型: int * concatArray(int * pArray1,int size1,int * pArray2,int size2)。
在您的主要功能:
- 创建大小8和10的两个int阵列。
- 使用循环,填充两个阵列与随机数。每一个随机数应该在 取值范围为0到9(含)。
- 一些注释指示正在被打印哪个数组打印两个阵列。
- 现在请concatArray与两个随机阵列和它们的尺寸作为参数。
- 使用一个指针,保存到从concatArray返回的数组的引用。
- 最后,打印返回的数组的一些注解指示,它的结果数组 从concatArray“。
醇>
当我从功能本身打印时,它会正确打印出来。当我尝试在main中打印出来时,它会打印出每个地址的随机数字串,而不是0-9中的单个数字。
功能:
int* concatArray(int* pArray1, int size1, int* pArray2, int size2)
{
int newArray[size1+size2];
for(int i=0; i<size1+size2; i++)
{
if(i>size1)
{
*(newArray+i) = *(pArray2+i-size1);
}
else
{
*(newArray+i) = *(pArray1+i);
}
}
cout<<endl;
for(int i=0; i<size1+size2; i++)
{
cout << *(newArray+i)<<endl;
}
return newArray;
我在main中调用函数的地方:
ptrConcatArray = concatArray(myArray1, size1, myArray2, size2);
cout <<endl;
cout << "Resultant array:" << endl;
for(int i=0; i<size1; i++)
{
cout << *(ptrConcatArray+i)<<endl;
}
答案 0 :(得分:2)
您正在返回指向本地数组的指针。函数返回时数组已被破坏,指针悬空(即没有指向任何有效的指针)。
你应该返回std::vector<int>
,一个可正确复制的动态数组(与内置数组类型不同),并自动管理数组的内存。
如果你的作业禁止使用标准库(就像它说“使用指针”那样),那么你可能会返回一个指向分配有new
的数组的指针:
int * newArray = new int[size1+size2];
这是一个坏主意,因为它会在调用程序上放置一个完成后删除数组的责任;但最糟糕的情况是内存泄漏,而不是内存损坏和返回悬空指针所得到的未定义行为。
答案 1 :(得分:0)
int newArray[size1+size2];
是局部变量,它不能是返回值。
int newArray = new int[size1+size2];
应该没问题。