I have a task where I'm supposed to multiply two quadratic matrices of size n in C, using pointers as function parameters and return value. This is the given function head: int** multiply(int** a, int** b, int n). Normally, I would use three arrays (the two matrices and the result) as parameters, but since I had to do it this way, this is what I came up with:
#include <stdio.h>
#include <stdlib.h>
int** multiply(int** a, int** b, int n) {
  int **c = malloc(sizeof(int) * n * n);
  // Rows of c
  for (int i = 0; i < n; i++) {
    // Columns of c
    for (int j = 0; j < n; j++) {
      // c[i][j] = Row of a * Column of b
      for (int k = 0; i < n; k++) {
        *(*(c + i) + j) += *(*(a + i) + k) * *(*(b + k) + j);
      }
    }
  }
  return c;
}
int main() {
  int **a = malloc(sizeof(int) * 2 * 2);
  int **b = malloc(sizeof(int) * 2 * 2);
  for (int i = 0; i < 2; i++) {
    for (int j = 0; i < 2; j++) {
      *(*(a + i) + j) = i - j;
      *(*(b + i) + j) = j - i;
    }
  }
  
  int **c = multiply(a, b, 2);
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      printf("c[%d][%d] = %d\n", i, j, c[i][j]);
    }
  }
  free(a);
  free(b);
  free(c);
  return 0;
}
I have not worked much with pointers before, and am generally new to C, so I have no idea why this doesn't work or what I'd have to do instead. The error I'm getting when trying to run this program is segmentation fault (core dumped). I don't even know exactly what that means... :(
Can someone please help me out?
 
     
     
    