Плавающие массивы

Что напечатает эта программа? :)

#include <stdio.h>
#include <stdlib.h>

#ifndef USE_HEAP
#define USE_HEAP 0
#endif /* USE_HEAP */

#define DATA_LEN    4
#define LEDS_COUNT    4

struct leds {
    char id;
#if USE_HEAP
    char data[];
#else
    char data[DATA_LEN];
#endif /* USE_HEAP */
};

int main(int argc, char **argv)
{
    size_t i, j, k = 0;

#if USE_HEAP
    struct leds    *p;

    p = malloc((sizeof(*p) + sizeof(*p->data) * DATA_LEN) * LEDS_COUNT);
    if (!p) {
        perror("Oops:");

        return 1;
    }
#else
    struct leds p[LEDS_COUNT];
#endif /* USE_HEAP */


    for (i = 0; i < LEDS_COUNT; ++i) {
        for (j = 0; j < DATA_LEN; ++ j) {
            p[i].data[j] = ++ k;
        }
    }

    for (i = 0; i < LEDS_COUNT; ++ i) {
        for (j = 0; j < DATA_LEN; ++ j) {
            printf("\t%d", p[i].data[j]);
        }

        putchar('\n');
    }

#if USE_HEAP
    free(p);
#endif /* USE_HEAP */

    return 0;
}