AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

Ein Thema von s.h.a.r.k · begonnen am 8. Mai 2011 · letzter Beitrag vom 9. Mai 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#11

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 8. Mai 2011, 23:01
AHHHH... Sowas ist doch Käse. Vor allem, weil es diesen Fehler wohl schon sehr, sehr lange gibt und er immer noch nicht gefixt wurde

Naja, das ganze klagen hilft leider nicht sehr viel, da es am Status im Moment nur sehr wenig bis gar nichts ändern wird. Zum Glück kann ich daher aber meinen Code einfach belassen, man muss ihn halt einfach nur anders nutzen.

Herzlichen Dank für euer Know How! Ich seh schon, ich sollte auch mal grob über das QC drüber schauen -- aber da steht eben auch nicht gerade wenig, was dann in einem ziemlichen Aufwand ausufern könnte...

-- Edit: Wow... Es wird echt immer besser
Delphi-Quellcode:
type
TApDynamicArray<T> = record
public type
  TApArrayToStringFunc = reference to function(Value: T): String;
public
  function ToString(const ToStrFunc: TApArrayToStringFunc): String;
end;

function TApDynamicArray<T>.ToString(const ToStrFunc: TApArrayToStringFunc): String;
begin
end;


procedure PrintIntegerArray(A: TApDynamicArray<Integer>);
begin
  Writeln( A.ToString(IntToStr) );
end;

var
  Tmp : TApDynamicArray<Integer>;
begin
  ReportMemoryLeaksOnShutdown := True;
  //Writeln( Tmp.ToString(IntToStr) );
  PrintIntegerArray(Tmp)
end.
... liefert in der aktuell gezeigten Version kein Speicherleak. Wenn ihr allerdings PrintIntegerArray() entfernt und das Writeln() aktiviert, dann kommt ein nettes Speicherleak zustande. Da fällt mir nur noch folgendes ein: WTF
Code:
---------------------------
Project1.exe: Memory Leak Detected
---------------------------
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):

13 - 20 bytes: Project1$1697$ActRec x 1
Entfernt man das reference to beim Typen TApArrayToStringFunc, dann funktionieren beide Versionen. Ist doch alles echt so super... Jetzt fang ich dann auch noch an, jeden scheiß zu überladen und auszubauen und hoffe, dass der Compiler alles mal in 10 Jahren auf die Reihe bring.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k ( 9. Mai 2011 um 00:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#12

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 9. Mai 2011, 07:27
Das hat was mit einer anonymen Methode in der main der dpr zu tun.

Boom:
Delphi-Quellcode:
procedure Foo(f: TFunc<Integer, string>);
begin
end;

begin
  ReportMemoryLeaksOnShutdown := True;
  Foo(IntToStr);
end.
Seit ich das weiß, mach ich keine Testanwendungen mehr als Consoleprojekt (zumindest nicht die, wo ich regen Gebrauch von delegates mache)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#13

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 9. Mai 2011, 14:43
Das hat was mit einer anonymen Methode in der main der dpr zu tun.
[...]
Seit ich das weiß, mach ich keine Testanwendungen mehr als Consoleprojekt (zumindest nicht die, wo ich regen Gebrauch von delegates mache)
Du machst Witze, oder?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 9. Mai 2011, 15:03
Ich mach wegen sowas auch keinen Testcode mehr direkt in die DPR ... zumindestens nicht ins begin ... end. davon,
also mindestens in eine Procedur ausgelagert und auf globale Variablen sollte man bei sowas auch verzichten.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#15

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 9. Mai 2011, 15:40
Bin auch eher durch Zufall auf das Problem gestoßen, da ich mir eigentlich immer eine Testklasse anlege, um den Code innerhalb der Main-Methode einigermaßen clean und übersichtlich zu halten. Wollte dann schnell was testen und *BOOM*... Hab mich gerade mal wieder ein wenig verschiedene Blogs gekämpft und es ist eigentlich echt frustrierend, wie viele Feinheiten man wissen muss/sollte, sodass man nicht an jeder zweiten Ecke einen Memoryleak erhält. Gleiches trifft dann ja leider auch auf den User des Codes zu, der den Code dann später mal verwendet -- ausgehend davon, dass man den Code nicht nur für sich selber schreibt.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 9. Mai 2011, 15:49
Mein letztes Speicherproblem mit diesen Records, Generics und Co. war ja eher, daß Delphi mal zuviel freigibt ... so zur abwechslung
(will etwas doppelt freigeben)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#17

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 9. Mai 2011, 15:56
Das hat was mit einer anonymen Methode in der main der dpr zu tun.

Boom:
Delphi-Quellcode:
procedure Foo(f: TFunc<Integer, string>);
begin
end;

begin
  ReportMemoryLeaksOnShutdown := True;
  Foo(IntToStr);
end.
Nur mal so nebenbei, welche Funktion ist hier den anonym
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#18

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 9. Mai 2011, 16:39
In dem Fall ist es wahrlich keine anonyme Methode. Das Problem hat eher was mit dem reference to zu tun:
type TFunc = reference to function...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#19

AW: Seltsames Speicherleak-Problem mit Records in Verbindung mit Arrays

  Alt 9. Mai 2011, 16:58
Du machst Witze, oder?
Nein.
Nur mal so nebenbei, welche Funktion ist hier den anonym
Ja ich weiß, method reference wäre politisch korrekt gewesen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 07:51 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