I want to calculate factorials for several numbers and return the results in the form of an array. Here is my program:
#include <stdio.h>
#include <stdlib.h>
int *fact(int arr[], int n) {
    int *facts, fac = 1, i, j;
    facts = (int *) malloc(n * sizeof(int));
    for (i = 0; i < n; i++) {
        for (j = 1; j <= *(arr + i); j++)
            fac = fac * j;
        *(facts + i) = fac;
    }
    return facts;
}
int main(void) {
    int *num, *facto, n, i;     //Initializing variables.
    printf("How many numbers to calculate factorial for :\t");
    scanf("%d", &n);
    num = (int*) malloc(n * sizeof(int));   //Dynamic allocation for array num.
    printf("Enter the elements separated by spaces :\t");
    for (i = 0; i < n; i++)
        scanf("%d", num + i);
    facto = fact(num, n);
    printf("\nFactorials are :\t");
    for (i = 0; i < n; i++)
        printf("%d\t", *(facto + i));
    printf("\n");
    return 0;
}
When it prints the elements of the returned array, however, only first value is correct. The others seem random.
What is wrong with this program, and how can I fix it?
 
     
     
     
    