![]() |
Alle Elemente eines Arrays löschen?
hoi,
wenn ich sagen wir mal 100 elemente habe, wie lösche ich die ?
Delphi-Quellcode:
das is mein type.
Type
TQuizAntwort = Record nick: string; rAntworten: integer; end;
Delphi-Quellcode:
das ist mein array.
Rankings: Array[0..100] of TQuizAntwort;
ich habe jetzt in jedem der 100 elemente einen nick(nick) und die punkte(aAntworten) des nicks. Wie lösche ich nun das ganze array wieder? ist das(so hab ich es bei records gemacht):
Code:
falsch?
for i := 0 to length(Rankings)-1 do
begin FillChar(rankings[i], SizeOf(rankings[i]), 0); end; |
Re: Alle Elemente eines Arrays löschen?
Delphi-Quellcode:
müsste so stimmen
for i := 0 to length(Rankings) - 1 do
begin Rankings[i] := nil; end; Gruß |
Re: Alle Elemente eines Arrays löschen?
ne, geht nicht
Zitat:
|
Re: Alle Elemente eines Arrays löschen?
Moin!
nil funktioniert nur bei Pointern, weil nil auf keinen Wert sondern einfach auf "nichts" verweißt. Es kommt jetzt drauf an, was du unter löschen verstehst. Falls du das Array leer machen willst...also die Länge auf 0 setzen willst dann
Delphi-Quellcode:
Wenn das Array seine Länge behalten soll dann...
SetLength(array, 0);
Delphi-Quellcode:
MfG Niels
hilf := Length(array);
SetLength(array, 0); SetLength(array, hilf); [edit] ...sry hatte gedacht, das wär ein dynamisches Array...zu dumm zum Lesen[/edit] |
Re: Alle Elemente eines Arrays löschen?
hallo niels,
kann ich Setlength überhaupt benutzen? ich kriege da "inkompatible typen". Mein array ist statisch btw |
Re: Alle Elemente eines Arrays löschen?
ups sry mein Fehler, hab gedacht es wäre ne Klasse, ist ja ein Record :schäm:
wer lesen kann ist klar im Vorteil Gruß |
Re: Alle Elemente eines Arrays löschen?
Hallo Pseudemys Nelsoni,
Strings sind intern als Referenzen auf Speicherbereiche implementiert. Der Referenzwert "nil", also eine "ausgenullte" Referenz, hat dabei die besondere Bedeutung, eines "leeren" strings. Zwar ist die Delphi-Implementierung relativ geschickt, so dass nur bei Bedarf Strings kopiert werden und stattdessen mit Referenzen gearbeitet wird. Das Konzept ist dabei vollkommen transparent realisiert, so dass der Entwickler nicht mitbekommt, dass bei der Arbeit mit Strings ständig Speicher alloziiert und wieder freigegeben wird, trotzdem ist der Compiler nicht allwissend. Solltest Du den Bereich einer String-Referenz (eine String-Variable) einfach ausnullen, gilt dieser String zwar als leer, der bisher referenzierte Speicherbereich ist allerdings verloren. Das vorgehen entspricht folgendem beim Umgang mit Objekten:
Delphi-Quellcode:
Verwende zum Dereferenzieren solcher Bereiche stattdessen die speziell für diesen und ähnliche Fälle konzipierte Routine Finalize und anschließend eine Routine zum ausnullen.
myObject:= TMyClass.Create;
myObject:= nil; // !lost reference -> memory leak Der folgende Aufruf hat bei mir mit Deinem Datentyp erfolgreich funktioniert:
Delphi-Quellcode:
Finalize(Rankings);
FillChar(Rankings, SizeOf(Rankings), 0); |
Re: Alle Elemente eines Arrays löschen?
danke choose, das funktioniert super :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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