![]() |
VST: Access Violation bei vst.deletenode
Moin zusammen,
habe ein kleines Problem und dazu noch nichts sinnvolles gefunden: Ich möchte lediglich in einem VST bestehende Nodes (häufig mit vielen Subnode-Strukturen) löschen. Das mache ich wie folgt:
Delphi-Quellcode:
Leider erhalte ich manchmal (nicht immer) eine EAccessViolation Fehlermeldung. Warum, verstehe ich nicht bzw. kann den Fehler auch nicht wirklich reproduzieren.
vst.BeginUpdate;
try while assigned(node) do begin if vst.isvisible[node] then vst.DeleteNode(node); node:= vst.GetNextChecked(node); end; finally vst.EndUpdate; end; Laut Debugger tritt im VST der Fehler in folgender Funktion auf:
Delphi-Quellcode:
Hat jemand eine Idee? - Die Daten werden in OnFreeNode freigegeben.
function TBaseVirtualTree.GetNextNoInit(Node: PVirtualNode): PVirtualNode;
// Optimized variant of GetNext, no initialization of nodes is performed (if a node is not initialized // then it is considered as not being there). begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); // If there is no child node try siblings. if Assigned(Result.FirstChild) then //########HIER FEHLER###### Result := Result.FirstChild else begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; Danke für Eure Mühe und schöne Grüße zum Sonntag, Frieder |
AW: VST: Access Violation bei vst.deletenode
Du löschst eine Node und willst anschließend dessen Nachfolger ermitteln?
[edit] Wie ist es so?
Delphi-Quellcode:
[/edit]
while assigned(node) do
begin NextNode := vst.GetNextChecked(node); if vst.isvisible[node] then vst.DeleteNode(node); node := NextNode; end; |
AW: VST: Access Violation bei vst.deletenode
Bing! Das wars - hätte ich analog zu Rückwärtsschleifen (for..downto..) auch drauf kommen können..
Danke Dir und schönen Sonntag! frieder |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz