Die Ausgabe von diesem ist 1 2 3. aber ich lösche den Speicher (free (tmp)) und kehrte dann tmp zurück. Warum druckt tmp immer noch in der Hauptfunktion? mit GCC-Compilerkann einen Speicherort nicht löschen
Antwort
delete
/free
nicht notwendigerweise Speicher aus. Sie können sie als freigegeben für den Speicherzuordner markieren. Der Speicherzuordner ist dann frei, ihn erneut in einem anderen new
/malloc
Anruf zuzuweisen. Der Punkt ist, sobald Sie den Speicherblock freigegeben haben, sollten Sie nicht darauf zugreifen. Es ist undefined Verhalten. Undefiniertes Verhalten bedeutet, dass es abstürzen, Müll zurückgeben, alten Wert zurückgeben, Ihren Computer sprengen kann, become a skynet, oder irgendetwas anderes, abhängig von der Implementierung/Situation.
Wenn Sie vertrauliche Informationen wie kryptografische Schlüssel/Passwörter im Speicher so kurz wie möglich speichern möchten, sollten Sie den Speicher selbst mit etwas anderem füllen, bevor Sie ihn freigeben (z. B. durch Aufruf von SecureZeroMemory
in Windows).
- 1. Kann Header-Speicherort nicht umleiten
- 2. Kann nicht lldb Speicherort zum Auflösen
- 3. LINQ Löschen - Kann eine Möglichkeit löschen, kann nicht Einzel enumerable
- 4. Kann ich einen Umgebungsvariablen-basierten Speicherort für Spring FileSystemResource verwenden?
- 5. Wie erstellt man eine Speicheransicht für einen nicht zusammenhängenden Speicherort?
- 6. kann eine Datenbankzeile nicht löschen, da sie einen Fremdschlüssel hat
- 7. Wie kann ich einen RabbitMq Austausch löschen?
- 8. Ein Float in einen uint8_t * Speicherort schreiben
- 9. Kann das GameObject nicht löschen
- 10. Kopieren der Ordnerstruktur an einen Speicherort, der nicht existiert
- 11. Kann eine Subdomain einen Domain-Cookie löschen?
- 12. Wie kann ich einen Git Alias löschen?
- 13. kann nicht Wert löschen jquery
- 14. Kann nicht aus Datatabellen löschen
- 15. Kann nicht von vorne löschen
- 16. Kann nicht auf Netzwerk-Speicherort von einigen Software
- 17. SVN: Ignoriere aber NICHT einen Ordner löschen
- 18. Std :: tmpfile() nicht TMPDIR Speicherort
- 19. kann Zeilen aus einer Remotezugriffsdatenbank nicht löschen
- 20. SQL 2005 kann Benutzer nicht löschen
- 21. Wie kann ich einen Benutzer auffordern, einen Speicherort für eine Datei auszuwählen?
- 22. kann nicht nach dem Löschen Standarddienstkonto
- 23. kann keine HTTP löschen Methode nicht RoR Löschen
- 24. C# kann Datei nicht löschen - System.UnauthorizedAccessException
- 25. Kann nicht Dokument wegen Aktualisierungskonflikt löschen
- 26. libAdIdAccess.a Speicherort?
- 27. Facebook kann meine Website nicht löschen
- 28. Git: Kann Remote-Zweig nicht dauerhaft löschen
- 29. Express Router CRUD API. Kann nicht löschen
- 30. einen kopierten Zeiger löschen
Warum greift Ihr Code auf Speicher zu, der bereits 'free()' 'ed ist? Warum gibt die Funktion 'delete()' an erster Stelle einen Zeiger auf 'free()' ed zurück? –
Als Randnotiz, nicht sicher, ob ich besonders die Node typedef gefällt. Wenn jemand nur Ihre Funktionsdefinition betrachtet, sieht es auf den ersten Blick so aus, als würden Sie eher nach Wert als nach Referenz vorgehen. Die Verwendung von typedef verringert die Lesbarkeit. Aber nur meine Meinung :) –
@Demian: Ich stimme zu, aber mein Prof in der Schule verwendet, um das Gleiche zu tun. Ich hasste es, aber einige Leute scheinen gerne Zeiger in typedefs zu verstecken. – Lucas