Целью моей программы является сортировка чисел на основе ввода пользователя.Все работает отлично, пока пользователь не захочет ввести более 6 данных (inp = 5), и я не уверен, почему это происходит.Можете ли вы просмотреть его и сообщить мне причину этого?
#include <stdio.h>
#include <stdlib.h>
int size =0;
void ascSort(int *a, int size, int temp) {
for(int i=1; i< size; i++){
for(int j=i; j>0; j--){
if(a[j-1]>a[j]){
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
}
void descSort(int *a, int size, int temp) {
for(int i=1; i< size; i++){
for(int j=i; j>0; j--){
if(a[j-1]<a[j]){
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
}
int main(){
char inpChar, isContinue='y';
int inp, temp=0;
int * a = malloc(0 * sizeof(*a));
do {
printf("How many numbers would you like to sort?\n");
fflush(stdin);
scanf("%d", &inp);
size = inp;
printf("%d\n", size);
a = realloc(a, size * sizeof(*a));
for(int i=0; i<size; i++){
//Below, I am printing 'size' for debugging purposes
printf("Type %d more numbers to sort ---- '%d'\n", inp, size);
fflush(stdin);
scanf("%d", &a[i]);
inp--;
}
printf("Please input a for ascending order and d for descending order\n");
fflush(stdin);
scanf(" %c", &inpChar);
switch (inpChar) {
case 'a':
ascSort(a, size, temp);
break;
case 'd':
descSort(a, size, temp);
break;
default: printf("Invalid character\n");
}
printf("Sorted Array: \n" );
for(int i=0; i<size; i++){
printf("%d\n", a[i]);
}
printf("Do you want to repeat? Type y/n\n");
fflush(stdin);
scanf(" %c", &isContinue);
} while(isContinue != 'n');
}
После того, как значение "inp" увеличится до 6, значение "inp" покажет значение мусора, которое совсем не ожидается.
Примечание Код обновлен и работает сейчас.Теперь мой вопрос: как улучшить этот код, чтобы я мог преобразовать этот код в язык ассемблера MIPS?Спасибо.