Ich muss eine Funktion schreiben, um ein Array im Heap zu sortieren. Diese Funktion sollte eine Kopie des Arrays erstellen, die Kopie sortieren und einen Zeiger auf die sortierte Kopie zurückgeben. Ich habe versucht qsort()
, aber ich bekomme seltsame Ausgabe. Ich bin sicher, dass es etwas mit dem Zeiger zu tun hat, aber es immer noch nicht herausfinden kann.Sortier-Array in Haufen
Dies ist mein Code so weit:
int cmpfunc(const void * a, const void * b)
{
return (*(int*)a - *(int*)b);
}
int sorted_copy(int* list[], size_t s)
{
int aList[s];
memcpy(aList,list,s);
printf("Array was copied successfuly to aList[] array\n\n");
printf("Before sorting the list is: \n");
for(int i = 0; i < s; i++)
printf("%d\n", aList[i]);
qsort(aList, s, sizeof(int), cmpfunc);
printf("After sorting the list is: \n");
for(int i = 0; i < s; i++)
{
printf("%d\n", aList[i]);
}
return *aList;
}
int main()
{
int list[10] = {4, 1, 2, 7, 3, 5, 6, 0, 8, 9};
sorted_copy(list,sizeof(list));
return 0;
}
An dieser die Ausgabe ich
Array was copied successfuly to aList[] array
Before sorting the list is:
4
1
2
7
3
5
6
0
8
9
0
0
0
0
3
0
0
0
268501009
32762
4199840
0
-1407817721
32762
12846904
0
1324151619
0
8
0
176
0
6487584
0
4199972
0
4200528
0
-1434081178
32762
After sorting the list is:
-1434081178
-1407817721
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
2
3
3
4
5
6
7
8
8
9
176
32762
32762
32762
4199840
4199972
4200528
6487584
12846904
268501009
1324151619
Process returned 0 (0x0) execution time : 0.281 s
Press any key to continue.
Ein Array von pointer-to-int in ein Array von int zu entleeren ist kein guter Anfang für alles, was Sie tun möchten. Außerdem kopieren Sie die Kapazität nicht wirklich. Das dritte Argument für 'memcpy' ist eine Größe in * Bytes *; keine Elementanzahl. Und schließlich wird das "Zurückgeben einer sortierten Kopie" entweder einen zusätzlichen Eingangs-/Ausgangsparameter, ein statisches Array oder eine dynamische Zuweisung umfassen. – WhozCraig
fix like [this] (https://ideone.com/m9zdtF) – BLUEPIXY
Sie geben eine Adresse einer lokalen Variablen zurück, die nach dem Schließen der Funktion gelöscht wird – bobra