Rohes array und nicht konstante Größe
-
Hallo,
mal eine Frage. Ich habe Code folgender Art schon öfter mal bei ein paar Kommilitonen gesehen:
#include <iostream> int main() { int len = 10, cnt = 0; int arr[len]; for (auto &i : arr) { i = ++cnt; } for (auto const &i : arr) { std::cout << i << '\n'; } }Bei denen Funktioniert das auch, bei mir (Visual Studio 2013) kompiliert sowas allerdings nicht (len ist kein konstanter Wert).
Daher gehe ich mal davon aus dass es nicht dem Standard entspricht?
Vor allem interessiert mich: Hat man hier ein (potentielles) Memory-Leak? Oder führt der Compiler bei so einem (dynamisch) erzeugtem array auch die entsprechenden Deallokationen automatisch mit ein?
-
Das nennt sich Variable Length Array (VLA).
Die werden auf dem Stack alloziert und automatisch beim Verlassen des Stack-Frames, d.h. der Funktion, freigegeben. Der Speicher ist wesentlich schneller "da" als new oder malloc.
-
Ach so, Ok. Ich dachte der Compiler fügt da einfach ein "new" ein sozusagen.
Alles klar, vielen Dank

-
Gibt es VLAs nicht nur in C?
-
Der Grund warum das bei denen funktioniert ist vermutlich dass sie GCC verwenden. Oder sonst einen Compiler der VLAs in C++ Code als non-Standard Extension unterstützt.
MSVC tut es nicht, daher spuckt er auch nen entsprechenden Fehler aus.patrick246 schrieb:
Gibt es VLAs nicht nur in C?
Offiziell ja, aber es gibt Compiler die es in C++ als Extension anbieten.