У меня есть функция, которая возвращает указатель на массив, и я хочу, чтобы напечатать каждое значение в массивезначение печати от указателя на массив возвращается из функции (C++)
Когда я запускаю его, он печатает
int* merge_sort(int arr[], int size) {
if (size <= 1) {
return &arr[0];
}
int size1 = size/2;
int arr1[size1];
for (int i = 0; i < size1; i++) {
arr1[i] = arr[i];
}
int size2 = size-size1;
int arr2[size2];
for (int i = 0; i < (size2); i++) {
arr2[i] = arr[i+size1];
}
int p1 = 0;
int p2 = 0;
int sorted[size];
while (p1 < size1 && p2 < size2) {
if (arr1[p1] < arr2[p2]) {
sorted[p1+p2] = arr1[p1];
p1++;
} else {
sorted[p1+p2] = arr2[p2];
p2++;
}
}
while (p1 < size1) {
sorted[p1+p2] = arr1[p1];
p1++;
}
while (p2 < size2) {
sorted[p1+p2] = arr2[p2];
p2++;
}
cerr << "sorted: ";
for (int& i : sorted) {
cerr << i << ",";
}
cerr << endl;
return &sorted[0];
}
/**
* Auto-generated code below aims at helping you parse
* the standard input according to the problem statement.
**/
int main()
{
int N;
int horses[N];
cin >> N; cin.ignore();
for (int i = 0; i < N; i++) {
int Pi;
cin >> Pi; cin.ignore();
horses[i] = Pi;
}
int *sorted = merge_sort(horses, N);
cerr << "~ " << sorted[0] << " " << sorted[1] << " " << sorted[2] << endl;
//cerr << "~~ " << sorted << " " << *sorted << " " << endl;
cerr << "^ " << *(sorted + 0) << endl;
cerr << "^ " << *(sorted + 1) << endl;
cerr << "^ " << *(sorted + 2) << endl;
for (int i = 0; i < N; i++) {
//cerr << "i " << i << endl;
// cerr << "SORTED?? " << sorted[i] << endl;
cerr << "value: " << *(sorted + i) << " ";
//cerr << "*** " << *(sorted) + i << endl;
}
cerr << endl;
}
Когда я бегу, он печатает
отсортирован: 5,8,9, ~ 5 8 9 ^ -5728 ^ 942815029 ^ 6297320 значение: 959592096 значение: 0 значение: -157570874
Почему мой цикл петли не печатает значения «5, 8, 9»? Как я могу это исправить, чтобы это произошло?
(под редакцией быть более детализированы. Кроме того, я понимаю, моя сортировка слиянием неправильно, но я просто пытаюсь заставить его вернуть то, что я могу использовать прямо сейчас ^. ^)
Можете ли вы попробовать создать [Minimal, Complete, и Проверяемость Пример] (HTTP: // StackOverflow .com/help/mcve) и показать нам? –
Если массив является указателем, который вы передаете функции, то почему вы его возвращаете? – PRP
@PRP, хорошая точка, OP уже имеет указатель, где он называет 'sort', а сам указатель не изменяется. – SingerOfTheFall