Лишние значения в динамическом массиве Си. Сортировка четных и нечетных
исходный массив пpеобpазуется по следующему алгоpитму: все нечетные элементы массива гpуппиpуются в поpядке возpастания в начале массива, а четные в поpядке убывания в конце. прототип: int* f( int* a, int n ) a - указатель исходного массива, n - pазмеp массива.
В массивах odd и even откуда-то берутся дополнительные значения, хоть память под них не выделяется.
При вводе 6 1 2 3 4 5 6
Выводится -33686019 2 4 5 3 1
Если пытаться выводить значения за массивом, будет ещё одно необходимое число и дальше случайные числа подряд
```
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int* f(int* a, int n);
int main()
{
int count;
printf("count: ");
scanf("%d", &count);
int* array = malloc(sizeof(int) * count);
for (int i = 0; i < count; i++) {
printf("%d element: ", i + 1);
scanf("%d", &array[i]);
}
f(array, count);
}
int* f(int* a, int n) {
int evenCount = 0; //четн
int oddCount = 0; //нечетн
for (int i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
evenCount++;
}
if (a[i] % 2 != 0) {
oddCount++;
}
}
int* even = (int)calloc(evenCount, sizeof(int));
int* odd = (int)calloc(oddCount, sizeof(int));
evenCount = 0;
oddCount = 0;
for (int i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
even[evenCount] = a[i];
evenCount++;
}
else {
odd[oddCount] = a[i];
oddCount++;
}
}
for (int i = 0; i < evenCount; i++) {
for (int j = 0; j < evenCount - i; j++) {
if (even[j] > even[j + 1]) {
char temp = even[j];
even[j] = even[j + 1];
even[j + 1] = temp;
}
}
}
for (int i = 0; i < oddCount; i++) {
for (int j = 0; j < oddCount - i; j++) {
if (odd[j] < odd[j + 1]) {
char temp = odd[j];
odd[j] = odd[j + 1];
odd[j + 1] = temp;
}
}
}
for (int i = 0; i < evenCount; i++) {
printf("%d\n", even[i]);
}
for (int i = 0; i < oddCount; i++) {
printf("%d\n", odd[i]);
}
}
```