The [i][j] syntax can be recovered by allocating an array of pointers, as well as the linear chunk, and setting each of these to point to each row:
Code:
char *outputWindowArray;
char **outputWindow;
/* malloc contiguous chunk */
outputWindowArray = (char*) malloc(sizeof(*outputWindowArray) * numRows * numCols);
/* malloc pointers, these will point to beginning of each row */
outputWindow = (char**) malloc(sizeof(*outputWindow) * numRows);
/* now set each pointer to row, there is a stride of numCols between each row */
for(i=0; i<numRows; i++)
outputWindow[i] = &outputWindowArray[i * numCols];
/* access row i, column j */
rowi_colj = outputWindow[i][j];
/* freedom */
free(outputWindow);
free(outputWindowArray);