もしくは、1次元配列を2次元配列かのように扱うか。

#define INDEX2(i, j, size) ((i) * (size) + (j))
#define MALLOC(type, size) (type*)malloc(sizeof (size) * (size))

p = malloc(sizeof (char) * size1 * size2); /* char p[size1][size2]; みたいなもの */
/* こんな感じで処理
 p[INDEX2(i, j, size2)] = i * j;    (p[i][j] = i * j; に相当)
*/
free(p);