int** generateMatrix(int n, int* returnSize, int* *returnColumnSizes) { *returnSize = n; *returnColumnSizes = (int*)malloc(sizeof(int) * n); int** ans = (int**)malloc(sizeof(int*) * n); int i; int j; for ( i = 0; i < n; i++){ ans[i] = (int*)malloc(sizeof(int) * n); (*returnColumnSizes)[i] = n; } int mid = n / 2; int loop = n / 2; int startx = 0; int starty = 0; int end = 1; int num = 1; while (loop){ for ( j = starty; j < n - end; j++){ ans[startx][j] = num; num++; } for ( i = startx; i < n - end; i++){ ans[i][j] = num; num++; } for ( j = n - end; j > starty; j--){ ans[i][j] = num; num++; } for (i = n - end; i > startx; i--) { ans[i][j] = num; num++; } startx++; starty++; end++; loop--; } if (n%2 != 0){ ans[mid][mid] = num; } return ans; }