AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Schutzverletzung beim Freigeben einer TStringList
Thema durchsuchen
Ansicht
Themen-Optionen

Schutzverletzung beim Freigeben einer TStringList

Ein Thema von Garfield · begonnen am 15. Okt 2005 · letzter Beitrag vom 16. Okt 2005
Antwort Antwort
Seite 2 von 2     12   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Schutzverletzung beim Freigeben einer TStringList

  Alt 16. Okt 2005, 11:22
Nein.

Free ist eine Procedure (keine Class Procedure, sorry) von TObject, und die ist so definiert:
Delphi-Quellcode:
procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;
Insofern stimmt Deine Aussage natürlich teilweise, weil Free eben den Speicher freigibt. Aber, wenn ich vorher die Objektreferenz auf Nil setze, passiert einfach N-I-X. Der Speicher wird nicht freigegeben, aber es knallt nicht, wie man am Code unschwer erkennen kann.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#12

Re: Schutzverletzung beim Freigeben einer TStringList

  Alt 16. Okt 2005, 11:33
Gut, einigen wir uns in der Mitte:
Es knallt vielleicht nicht, aber die Speicherleiche hat man halt trotzdem.

Wobei ich mich frage, wie er die Procedure im Speicher wiederfindet, wenn ich den Zeiger "genilt" habe und es keine class-Procedure ist.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#13

Re: Schutzverletzung beim Freigeben einer TStringList

  Alt 16. Okt 2005, 11:37
Zitat von alzaimar:
Wenn aber doch, dann tippe ich, ehrlich gesagt, auf einen dieser fiesen Seiteneffekte, der sich dann einstellt, wenn irgendwo im Code was zerschossen wurde (Durch Überschreiben eines freigegebenen Speicherbereiches etwa).
Hier wird mit lkVCDxRip.exe die SVCD in einen temporären Ordner kopiert und die XML erstellt. Anschließend wird die MPG verschoben und umbenannt, die Kapitelzeiten aus der XML ausgelesen, die Kapiteldatei gespeichert und dann kommt bei manchen Systemen eine Zugriffsverletzung bevor der temporäre Ordner wieder gelöscht wird. Vor allen anderen NIL und Free-Befehlen wird maximal eine kleine Graphik- oder Batchdatei gespeichert.

Zitat von GuenterS:
Hallo, mir ist aufgefallen, dass Du die kl StringListe öfter als notwendig durchgehst (bzw. brauchst Du sie gar nicht durchgehen), habe deine procedure dahingehend überarbeitet, dass dies nicht passiert und auch schon die try ... finallys eingebaut.
Danke, die zwei Schleifen waren mir noch gar nicht bewußt geworden. Das werde ich nachher gleich einbauen.

Zitat von tigerman33:
... oder es knallt.
In dem Fall gab es eine "Zugriffsverletzung bei Adresse 004c835f im modul "*.exe" lesen von Adresse 000000."

Zitat von tigerman33:
Wobei ich mich frage, wie er die Procedure im Speicher wiederfindet, wenn ich den Zeiger "genilt" habe und es keine class-Procedure ist.
Vermutlich wird sie nicht gefunden und deshalb kommt es zu der Zugriffsverletzung?
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#14

Re: Schutzverletzung beim Freigeben einer TStringList

  Alt 16. Okt 2005, 11:44
Das war meine Vermutung. Aber alzaimar sagt ja, dass einfach nichts passiert, also auch keine AV. Damit keine AV kommt, muss er ja den Prozedurcode zumindest im Speicher wiederfinden. Und da frag ich mich halt, wie das funktionieren soll.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#15

Re: Schutzverletzung beim Freigeben einer TStringList

  Alt 16. Okt 2005, 11:49
Hallo,
Zitat von Garfield:
Zitat von tigerman33:
Wobei ich mich frage, wie er die Procedure im Speicher wiederfindet, wenn ich den Zeiger "genilt" habe und es keine class-Procedure ist.
Vermutlich wird sie nicht gefunden und deshalb kommt es zu der Zugriffsverletzung?
Nein, da Free eine Methode der untersten Basisklasse ist (TObject), weiss der Compiler immer, wohin er springen muss, nämlich nach TObject.Free. Ansonsten würde ja die Überprüfung auf nil in Free keinen Sinn ergeben. Im CPU-Fenster steht deshalb einfach "call TObject.Free".

Gruß
xaromz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz