AGB  ·  Datenschutz  ·  Impressum  







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

Array mit Recordinhalten löschen

Ein Thema von Mojito · begonnen am 30. Nov 2012 · letzter Beitrag vom 3. Dez 2012
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.388 Beiträge
 
Delphi 12 Athens
 
#1

AW: Array mit Recordinhalten löschen

  Alt 3. Dez 2012, 01:31
Gerade für die Datensicherheit beim Bearbeiten von Arrays hab ich endlich mal einen Vorschlag gemacht. (darf man gerne für voten)
http://qc.embarcadero.com/wc/qcmain.aspx?d=110391
Die schnelleren Zugriffe über Move und Co. sind da ja schonmal ganz schön fehleranfällig.

Derartige Codes kann man aber auch schon in älteren Delphis nutzen, außer daß man sich dort die Funktionen für jeden Arraytypen einzeln implementieren müste/sollte.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Dez 2012 um 01:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Array mit Recordinhalten löschen

  Alt 3. Dez 2012, 08:26
Gerade für die Datensicherheit beim Bearbeiten von Arrays hab ich endlich mal einen Vorschlag gemacht. (darf man gerne für voten)
http://qc.embarcadero.com/wc/qcmain.aspx?d=110391
Kannst du mir erklären, wie das hier funktioniert, denn das verstehe ich nicht (in der class procedure Swap)
Delphi-Quellcode:
  if @Value = @Value then
    exit;
Müsste das nich eher
Delphi-Quellcode:
  if @Value1 = @Value2 then
    exit;
heißen?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.388 Beiträge
 
Delphi 12 Athens
 
#3

AW: Array mit Recordinhalten löschen

  Alt 3. Dez 2012, 09:28
Dieser böse Copy&Paste-Notepadprogrammierung-Codevervollständigung funktioniert auch nich immer.


Hmm, warum kann ich via WebQC nix editieren, was über QCApp geschrieben wurde?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Array mit Recordinhalten löschen

  Alt 3. Dez 2012, 11:33
Himitsu, in der Insert ist das überflüssig und in der Remove sogar falsch?

FillChar(Values[Index], SizeOf(T), 0);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: Array mit Recordinhalten löschen

  Alt 3. Dez 2012, 12:28
Ins Insert muß es rein, denn wenn das z.B. ein Array of String oder IInterface ist, dann muß dort der Speicher freigegeben/genullt werden, ohne die Referenzzählung zu nutzen.
Aber beim Remove hast du Recht, da geht es auf den falschen Index. (muß Values[High(Values)] nullen)

Statt FillChar könnte man zwar auch InitializeRecord verwenden, aber FillChar dürfte locker ausreichen.

Bei Remove und Insert wurden Felder kopiert, womit eines der Felder nun doppelt existiert, aber die doppelte "Referenz" nicht in eventuell vorhandenen Referenzzählungen beachtet wurde, darum muß diese eventuelle Referenz "vernichtet" werden, bzw. es wirde für gewisse Typen die Speicherverwaltung nicht angepaßt.
(dyn. Array, String, Interface, Variant und Records mit den Zuvorgenannten)



Nja, Emba wird doch hoffentlich seine neu eingefühten Unittests darauf anwenden, bzw. bei Übernahme der Codes nochmal einen Blick drauf werfen.
Ein Therapeut entspricht 1024 Gigapeut.
  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 06:23 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-2025 by Thomas Breitkreuz