Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alle Elemente eines Arrays löschen? (https://www.delphipraxis.net/13340-alle-elemente-eines-arrays-loeschen.html)

Pseudemys Nelsoni 16. Dez 2003 15:10


Alle Elemente eines Arrays löschen?
 
hoi,

wenn ich sagen wir mal 100 elemente habe, wie lösche ich die ?

Delphi-Quellcode:
Type
  TQuizAntwort = Record
    nick: string;
    rAntworten: integer;
  end;
das is mein type.

Delphi-Quellcode:
Rankings: Array[0..100] of TQuizAntwort;
das ist mein array.

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:
    for i := 0 to length(Rankings)-1 do
    begin
      FillChar(rankings[i], SizeOf(rankings[i]), 0);
    end;
falsch?

Tyrael Y. 16. Dez 2003 15:15

Re: Alle Elemente eines Arrays löschen?
 
Delphi-Quellcode:
for i := 0 to length(Rankings) - 1 do
    begin
      Rankings[i] := nil;
    end;
müsste so stimmen

Gruß

Pseudemys Nelsoni 16. Dez 2003 15:20

Re: Alle Elemente eines Arrays löschen?
 
ne, geht nicht

Zitat:

[Fehler] Unit1.pas(478): Inkompatible Typen: 'TQuizAntwort' und 'Pointer'

Niels 16. Dez 2003 15:24

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:
SetLength(array, 0);
Wenn das Array seine Länge behalten soll dann...

Delphi-Quellcode:
hilf := Length(array);
SetLength(array, 0);
SetLength(array, hilf);
MfG Niels

[edit] ...sry hatte gedacht, das wär ein dynamisches Array...zu dumm zum Lesen[/edit]

Pseudemys Nelsoni 16. Dez 2003 15:28

Re: Alle Elemente eines Arrays löschen?
 
hallo niels,

kann ich Setlength überhaupt benutzen? ich kriege da "inkompatible typen". Mein array ist statisch btw

Tyrael Y. 16. Dez 2003 15:29

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ß

choose 16. Dez 2003 15:32

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:
myObject:= TMyClass.Create;
myObject:= nil; // !lost reference -> memory leak
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.

Der folgende Aufruf hat bei mir mit Deinem Datentyp erfolgreich funktioniert:
Delphi-Quellcode:
Finalize(Rankings);
FillChar(Rankings, SizeOf(Rankings), 0);

Pseudemys Nelsoni 16. Dez 2003 15:45

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