Frage

Ich habe Besorgnis über Arrays mit variabler Länge. Wenn ich ein Array dynamisch zuweisen möchte, bekomme ich Null, wenn es nicht möglich ist, genügend Speicher zuzuweisen, und ich kann in meinem Programm ordnungsgemäß darauf reagieren. Mit einem Array mit variabler Länge erhalte ich diese Informationen nicht. Was soll ich damit machen?

War es hilfreich?

Lösung

Sie haben Recht, dass VLAs im Grunde immer unsicher sind. Die einzige Ausnahme ist, wenn Sie sicherstellen, dass Sie sie nie größer machen als eine Größe, die Sie sicher fühlen würden, wenn Sie ein Array mit fester Größe machen, und in diesem Fall können Sie genauso gut ein Array mit fester Größe verwenden. Es gibt eine obskure Klasse von rekursiven Algorithmen, bei denen VLAs den Unterschied zwischen dem Problem (Stack Overflow) und der Möglichkeit machen könnten, aber zum größten Teil empfehlen würde, nie VLAs zu verwenden.

Das bedeutet jedoch nicht, dass VLA -Typen nutzlos sind. Während VLA schlecht/gefährlich ist, Zeiger zu VLA Typen sind äußerst nützlich. Sie ermöglichen es, dynamisch zugeteilt zu haben (über malloc) Mehrdimensionale Arrays ohne die Dimensionsarithmetik manuell wie in:

size_t n;
double (*matrix)[n] = malloc(n * sizeof *matrix);

um eine n-by-n-Matrix adressierbar zu erhalten matrix[i][j].

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top