Wann soll ein Array mit variabler Länge in C verwendet werden, aber wann eine dynamische Zuordnung?

Ich erfahre mehr über Variable Length Array in C99, aber es sieht so aus, als würde es sich fast genauso verhalten wie malloc + free.

Die praktischen Unterschiede, die ich fand:

Zu große Array-Handhabung:

unsigned size = 4000000000;
int* ptr = malloc(size); // ptr is 0, program doesn't crash
int array[size]; // segmentation fault, program crashes

Speicherlecks: nur bei dynamischer Arrayzuordnung möglich:

int* ptr = malloc(size);
...
if(...)
    return;
...
free(ptr);

Lebensdauer des Objekts und Möglichkeit, von der Funktion zurückzukehren: Das dynamisch zugewiesene Array lebt, bis der Speicher freigegeben ist und von der Funktion zurückgegeben werden kann, die den Speicher zugewiesen hat.

Resizing: Größenänderung nur mit Zeigern auf den zugewiesenen Speicher möglich.

Meine Fragen sind:

Was sind mehr Unterschiede (ich bin an praktischen Ratschlägen interessiert)?Was sind die Probleme, die ein Programmierer mit beiden Arten von Arrays mit variabler Länge haben kann?Wenn Sie VLA wählen, aber bei dynamischer Array-Zuweisung?Was ist schneller: VLA oder malloc + free?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage