C99なら可変長配列じゃないけどこんな書き方もできたような気がする。
char (*data)[width] = malloc(sizeof (char) * height * width);