Это должно работать:
int *ary, /* Array */
x_size, /* X size of the array */
y_size; /* Y size of the array */
x = rand() % MAX_SIZE;
y = rand() % MAX_SIZE;
ary = malloc(sizeof(int) * (x * y));
ary[1][1] = 1;
Если индексирование [] [] не работает, возможно, вам придется использовать
*(ary + (x_size * X_COORD) + Y_COORD)
для доступа к элементу [X_COORD][Y_COORD]
. Я не совсем уверен, поддерживает ли c99 этот синтаксис.
Извините, я не мог придумать, как сказать это без кода.
РЕДАКТИРОВАТЬ: Извините за путаницу - думал, что вам нужен массив случайных размеров.