所以我尝试将2个已排序的数组合并为一个,我得到了非常奇怪的数字,如输出。这是我的代码:
#include<iostream>
using namespace std;
int* add(int first[],int second[], int sizeFirst, int sizeSecond)
{
int result[sizeFirst + sizeSecond];
int indexFirst = 0,indexSecond = 0;
for(int i = 0;i < sizeFirst + sizeSecond;i++)
{
if(indexFirst == sizeFirst || first[indexFirst] > second[indexSecond])
{
result[i] = second[indexSecond];
indexSecond++;
}
else
{
result[i] = first[indexFirst];
indexFirst++;
}
}
return result;
}
int main()
{
int n;
cin>>n;
int arr[n];
for(int i = 0;i < n;i ++)
cin>>arr[i];
int m;
cin>>m;
int arr2[m];
for(int i = 0;i < m;i ++)
cin>>arr2[i];
int *res;
res = add(arr,arr2,n,m);
for(int i = 0;i < n + m;i ++)
cout<<res[i]<<" ";
return 0;
}
注意:它正确排序,所以错误不存在。此外,我需要将其作为一个函数来完成,因为稍后我将需要它来处理其他一些东西。
答案 0 :(得分:1)
return result;
您正在返回一个指向本地数组的指针,该指针会在之后立即销毁 - 这是未定义的行为。您应该使用new
分配它,或使用std::vector
(首选)。
此外,int result[sizeFirst + sizeSecond];
无效C ++,因为标准不允许变量大小的数组(但int* result = new int[sizeFirst + sizeSecond];
有效)。