>>593
char (*data)[WIDTH];
data[i][j] は *(data + i*WIDTH + j)
宣言時にwidthが解っていないと、
データを格納するアドレスを計算できない

それから、char *data[1000][1000]
だと、charへのポインタ がたくさん確保されちゃうよ