2015-03-24 2 views
-1

Так что я пытаюсь объединить 2 отсортированных массива в один, и я получаю действительно странные числа, такие как вывод. Вот мой код:C++ Объединение 2 отсортированных массивов в 1 отсортированный

#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; 
    } 

Примечания: Он сортирует его правильно, поэтому ошибки там нет. Также мне нужно сделать это как функцию, потому что мне понадобится это позже для некоторых других вещей.

+3

Есть ли причина, по которой вы не просто используете ['std :: merge'] (http://en.cppreference.com/w/cpp/algorithm/merge)? – Wintermute

+0

@Wintermute Я хотел бы запрограммировать его сам для практики –

+0

как в аду этот код даже скомпилирован с 'int result [sizeFirst + sizeSecond];'? – Guiroux

ответ

1
return result; 

Вы возвращаете указатель на локальный массив, который сразу же уничтожается - это неопределенное поведение. Вы должны либо выделить его, используя new, либо использовать std::vector (что является предпочтительным).

Кроме того, int result[sizeFirst + sizeSecond]; недействителен C++, поскольку стандарт не допускает массивы с переменным размером (но действителен int* result = new int[sizeFirst + sizeSecond];).

+0

Спасибо, сработало: D –

Смежные вопросы