Memory for variable length array data is allocated by the library when
they are read, and must be freed by the user.
Because the length of a variable length array is, in general, not
known until after it is read, the library must allocate the memory,
and the user must free it with nc_free_vlen().
VLEN data must be handled in a special struct:
/* This is the type of arrays of vlens. */
typedef struct {
size_t len; /* Length of VL data (in base type units) */
void *p; /* Pointer to VL data */
} nc_vlen_t;
ADVICE: In many cases where VLENs seem useful, one should consider
instead fixed array sizes and on-the-fly compression, which will
result in efficient data storage, without violating the netCDF
classic data model (and thus breaking compatibility with existing
software.)