This is a code for multiplying two square matrices in C.
What is the difference between using malloc and calloc in void multiply() function?
When using malloc, I am getting garbage values, but calloc is providing the right answer.
Only the first row is outputting garbage values so is it an issue with the way malloc allocates space in the heap as compared to calloc?
#include <stdio.h>
#include <stdlib.h>
int *getArray(int);
void display(int *, int, int);
void multiply(int *, int *, int);
int main() {
    int n;
    printf("enter dimension of square matrix:\n");
    scanf("%d", &n);
    int *arr1;
    int *arr2;
    arr1 = getArray(n);
    display(arr1, n, n);
    printf("\n now give input for next array");
    arr2 = getArray(n);
    display(arr2, n, n);
    printf("\n\n\n");
    multiply(arr1, arr2, n);
    return 0;
}
int *getArray(int n) {
    int *arr = (int *)malloc(n * n * sizeof(int));
    printf("\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", (arr + i * n + j));
        }
    }
    /*for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf(" %d ", *(arr + i * n + j));
        }
        printf("\n");
    }*/
    return arr;
}
    
void display(int *arr, int row, int col) {
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            printf(" %d ", *(arr + i * row + j));
        }
        printf("\n");
    }
}
void multiply(int *arr1, int *arr2, int n) {
    int *arr = (int *)calloc(n * n, sizeof(int));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
                *(arr + i * n + j) += (*(arr1 + i * n + k)) * (*(arr2 + k * n + j));
            }
        }
    }
    printf("product of above matrices = \n\n");
    display(arr, n, n);
}
 
    