AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Elemente eines Arrays löschen?

Ein Thema von Pseudemys Nelsoni · begonnen am 16. Dez 2003 · letzter Beitrag vom 16. Dez 2003
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 16:10
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.

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?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 16:15
Delphi-Quellcode:
for i := 0 to length(Rankings) - 1 do
    begin
      Rankings[i] := nil;
    end;
müsste so stimmen

Gruß
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 16:20
ne, geht nicht

Zitat:
[Fehler] Unit1.pas(478): Inkompatible Typen: 'TQuizAntwort' und 'Pointer'
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#4

Re: Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 16:24
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

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]
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 16:28
hallo niels,

kann ich Setlength überhaupt benutzen? ich kriege da "inkompatible typen". Mein array ist statisch btw
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 16:29
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ß
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 16:32
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);
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#8

Re: Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 16:45
danke choose, das funktioniert super
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:58 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