Wie handelt man stack overflow error richtig?
-
Hallo, ich schreibe gerade ein Programm, bei dem sehr große Arrays auftreten können (und das soll bitte auch so bleiben
)
Würde ich die arrays auf dem Heap erzeugen könnte man ja so etwas machen:try { int * array = new int[sehr große zahl]; } catch(std::bad_alloc)Aber was ist, wenn ein Array auf dem Stack zu groß ist:
int array[sehr große zahl]; //programm crashedGibt es eine Möglichkeit diesen Fehler zu handeln? (außer natürlich keinen stack zu benutzen oder die arrays zu splitten oder die arrays auf die festplatte auszulagern usw. Die Arrays sollen schon am Stück im RAM bleiben).
-
Ja, und zwar
außer natürlich keinen stack zu benutzen
.
Natürlich kannst du auch die maximale Stackgröße anpassen. Musst du mal in den Einstellungen suchen.
-
Für welches OS?
-
Für Windows mit dem Microsoft Visual C++ 2008.
Es gibt also nur vom Compiler aus Einstellungen, die sowas regeln? Der C++ Standard bietet keine Möglichkeit diesen Fehler abzufangen?
-
ErrorHandling schrieb:
Es gibt also nur vom Compiler aus Einstellungen, die sowas regeln? Der C++ Standard bietet keine Möglichkeit diesen Fehler abzufangen?
Richtig.
-
Bzw. Möglichkeiten vom Betriebssystem (mit SEH).
http://msdn.microsoft.com/en-us/library/ms680657(VS.85).aspx
-
Wobei die Gefahr wahrscheinlich grösser ist, durch zu viele Funktionen (vor allem bei Rekursion) einen Stackoverflow zu erzeugen, als durch statische Arrays. Grössere Datenmengen sollte man ohnehin dynamisch anfordern.