Heap-allocated dynamically-sized NxM matrix in C99:
double (*mat)[M] = calloc(N * M, sizeof (double));Ah, good point. I always forget that VLA types in C99 are actually types, and so you can use them in these contexts as well.
It's a shame they killed VLAs as a mandatory language feature. They didn't make C into Fortran (which I think was the hope, between them, complex numbers, and "restrict"?), but they did make some things a great deal more pleasant to write.
>and is the only way to get a dynamically sized heap-allocated 2D array in C (VLAs give you stack-allocated arrays, with all the size limits that entails).
Why wouldnt you be able to create a dynamic array of arrays with placement new and a cast.
In C++, this all is best handled by a library class.