Ich bin gerade auf diesen Blog-Beitrag gestoßen, in dem „Stomping Memory“ erwähnt wird:
Ein C ++ - Programm, das leicht in der Lage ist, Speicher zu stapeln (etwas, von dem Sie wahrscheinlich noch nie gehört haben, wenn Sie in einer verwalteten Codewelt geboren wurden.)
Und tatsächlich habe ich noch nie davon gehört!
Also, was ist das, ein Gedächtnisstampfen, ein Stampfen der Erinnerung? Wann tritt es auf?
c++
c
memory
memory-management
Scravy
quelle
quelle
Antworten:
Der Speicher wird "getrampelt", wenn ein Code den Speicher manipuliert, ohne zu bemerken, dass ein anderer Code diesen Speicher in einer widersprüchlichen Weise verwendet. Es gibt verschiedene Möglichkeiten, wie der Speicher gestapelt werden kann.
Man reserviert beispielsweise 100 Bytes Speicher, speichert dann aber etwas nach der 100. Adresse. Dieser Speicher kann verwendet werden, um etwas völlig anderes zu speichern. Dies ist besonders schwer zu debuggen, da das Problem auftritt, wenn etwas versucht, auf das Opfer zuzugreifen, auf das getreten wurde, und der Code, auf den getreten wurde, möglicherweise völlig unabhängig ist.
Ein anderer ist der Zugriff auf den Speicher, nachdem er freigegeben wurde. Der Speicher kann einem anderen Objekt zugewiesen werden. Auch hier kann der Code, der das Problem anzeigt, mit dem neu zugewiesenen Objekt verknüpft sein, das dieselbe Adresse hat und nicht mit dem Code zusammenhängt, der das Problem verursacht hat.
quelle
Sehr oft ist es ein Pufferüberlauf; Als Beispiel dieser Code:
wird auf alles "stampfen", was gerade in der nächsten Sache in Erinnerung bleibt
buffer
. Im Allgemeinen ist "Stampfen", wenn der Speicher unbeabsichtigt beschrieben wird.quelle
Andere Antworten sind grundsätzlich richtig, aber ich möchte ein Beispiel geben.
Diese Samples können in eine Endlosschleife führen (oder auch nicht), da es sich um ein undefiniertes Verhalten handelt.
Sehr wahrscheinlich wird die Variable
i
im Speicher direkt nach dem Array gespeichert. Der Zugriffa[10]
könnte also tatsächlich zugreifeni
mit anderen Worten, er könnte den Schleifenzähler zurücksetzen.Ich denke, es ist ein gutes Beispiel, das das "Stampfen" des Gedächtnisses demonstriert.
quelle