I have an assignment where i have to make a matrix multiplication program more efficient so i wrote a method called multiply matrix but after i actually do the matrix multiplication in a loop the final product matrix is all zero but, if i check while in the loop its not zero
int** multiply_matrices(int** matrix1, int** matrix2, int m1, int n1, int m2, int n2) {
if(n1 != m2) {
    printf("error\n");
    return NULL;
}
int i = 0;
int j = 0;
int k = 0;
int** product = (int**) malloc(m1 * sizeof(int*));
for(i = 0; i<m1; i++){
    product[i] = (int*) malloc(n2 * sizeof(int));
    for(j = 0; j<n1; j++){
        product[i][j] = 0;
    }
}
*
for(i = 0; i < m1; i ++) {
    product[i] = (int*) malloc(n2 * sizeof(int));
    int chg = 0;
     while(j<n2){
        if(k == n1 ){
            //chg = 0;
            k = 0;
            //printf("%d\n", j);
            j++;
        }
             product[i][j]  += matrix1[i][k] * matrix2[k][j];
            printf("%d \n", product[i][j]);
        k++;
        chg = 1;
    }
}
return product;
}
 
    