Was ist ein Stapel-Überlauf?

Stapelüberlauf ist eine Programmierungsstörung, in der ein Versuch, Daten zu einem bestimmten Block des Gedächtnisses zu schreiben ausfällt, weil es keinen Raum gibt, der im Block gelassen wird. Diese Art der Störung geschieht, genauso wie Puffer überläuft, Haufen überläuft, und Stapelpuffer läuft über. Der Unterschied zwischen diesen Arten von Störungen hängt von der ComputerDatenstruktur ab, die verwendet wird, und die allgemeine Eigenschaft ist, dass ein Versuch auftritt, um mehr Daten, als zu schreiben dort ist der vorhandene Raum, zum er zu halten.

Symptome eines Stapelüberlauf können abhängig von der Computersprache, die verwendet werden und der vorhandenen Störungsberichtsmaschinerie schwanken. In C++ verkündet sich ein Stapelüberlauf häufig als Segmentationstörung, und häufig gibt es keine zusätzliche Information, die gegeben wird, um festzustellen wo oder, wie der Überlauf geschah. Ein Überlauf in Java ergibt häufig einen Abbruch der virtuellen Maschine, der heraus eine relativ ausführliche Fehlerdatei gibt. Unabhängig davon die Sprache, in der ein Überlauf geschieht, kann der Überlauf durch korrekte Entstörung und Kennzeichnung der ursprünglichen Sammelquelle fast immer behoben werden.

Computersprachen, die ausdrückliches Gedächtnismanagement anbieten, sind häufig einfacher, gegen Stapelüberlauf zu schützen. Weit geltende programmierenpraxis schreibt normalerweise, dass für jedes Segment des Gedächtnisses ein Programm zuteilt, das Programm sollte auch sich löschen vor. C++ erlaubt diesen Mechanismus und vorsichtige Überwachung kann die Menge des Gedächtnisses Gebrauch eines Programms zu einem Minimum auf diese Art halten. Sprachen, die nicht ausdrückliches Gedächtnismanagement anbieten und anstatt implizites Gedächtnismanagement verwenden, sind schwieriger, von den Stapelsammelstörungen abzuschirmen. Java behandelt sein eigenes Gedächtnis innerhalb seiner virtuellen Maschine, also können Daten nicht ausdrücklich nach Belieben gelöscht werden, um Raum für mehr zu bilden.

Ein allgemeiner Fehler der Anfängerprogrammierer ist, anzunehmen, dass ein Stapelüberlauf nicht in den Computersprachen geschehen kann, die ihr eigenes Gedächtnismanagement behandeln. Während dieses zuerst plausibel scheint, ist es nicht wirklich der Fall. Sprachen mit implizitem Gedächtnismanagement haben häufig Abfalkollektoren, die freie nicht notwendige Blöcke des Gedächtnisses, aber diese Abfalkollektoren nicht immer bearbeiten, zu der Zeit als ein Programmierer erwartet. Das Bauen auf Abfalkollektoren ist verhältnismäßig gefährlich, und es kann ein Programm nicht vor einer Sammelstörung immer schützen.

Sammelstörungen können umwälzend sein und ein gesamtes Programm einstellen, oder sie können fast leise sein und ein Programm vorwärts fortfahren lassen. Diese zweiten Arten von Störungen sind häufig das härteste zu finden, weil eine Störung auftreten kann, die von einem Überlauf viele Linien des Codes vorher kam. Ein Stapelüberlauf nicht häufig erfordert das Suchen durch ein gesamtes Programm, aber, länger ein Programm laufen kann, nachdem ein Überlauf, kann die Störung das schwieriger sein zu finden und zu regeln.