Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   IOS Compiler Bug ??? ARC (https://www.delphipraxis.net/174930-ios-compiler-bug-arc.html)

arnof 19. Mai 2013 08:53

IOS Compiler Bug ??? ARC
 
Hi,

ich plage mich schon länger mit einem seltsamen Problem rum wo ich auch schon mal was zu Debuginfos hier nachgefragt habe.

Ich habe nun den Punkt lokalisiert, bei dem sich die App ins Nirwana verabschiedet:

Function die ein Objekt zurückgibt, welches in der Funktion erzeugt wird und auch noch andere Objekt enthält:

function Vectorizer.findObject(image:TBitmap):TAFSImageObje ct;
..
..
obj:=TAFSImageObjet.Create(....);
.....

die stelle wo es hängenbleibt ist genau:

result:=obj;

hier will der Comilper irgendwas freigeben und crasht dabei ?

Ich habe es über die Debugausgaben ermittelt:

{$IFDEF IOS}
NSLog((NSStr('FOUND Obj'+obj.RefCount.ToString) As ILocalObject).GetObjectID);
{$ENDIF}

result:=obj;

{$IFDEF IOS}
NSLog((NSStr('to Result'+result.RefCount.ToString) As ILocalObject).GetObjectID);
{$ENDIF}

Das passiert erst beim 2'ten mal, wenn die Routine aufgerufen wird.

Der 100% gleiche Code läuft aber Problemlos unter Windows und MacOS.

Hat jemand ein Tipp da das den neuen Compiler mit der ARC Funktion betrifft!

arnof 19. Mai 2013 11:19

AW: IOS Compiler Bug ??? ARC
 
also hier ist definitiv noch ein dicker Käfer begraben :evil:

Durch um designen kann ich die Durchlaufzahl erhöhen die Objekte werden in einer List gespeichert. wenn man hier statt über eine variable als Zwischenspeicher direkt in eine list speichert, dann gehts über 30 durchläuft, bevor er an weiteren komischen stellen abschmiert .....
Er schmiert immer an den Übergängen ab, wo lokale Variablen vom Compiler freigegeben werden, also resultzuweisungen bzw. am ende von funktionen wo man keinen einfluss nehmen kann .....

Sir Rufo 19. Mai 2013 11:28

AW: IOS Compiler Bug ??? ARC
 
Kannst du mal eine Mini-Projekt anhängen, wo dieser Fehler nachvollziehbar ist?

Ich vermute mal, dass du eine ungültige Instanz-Referenz über das Result reinschleust.

Insider2004 19. Mai 2013 11:45

AW: IOS Compiler Bug ??? ARC
 
Tritt der Fehler auch in Lazarus auf?

Daniel 19. Mai 2013 12:37

AW: IOS Compiler Bug ??? ARC
 
Ein Code-Beispiel wäre schon hilfreich.
Hast Du mal versucht, das Attribut
Delphi-Quellcode:
[unsafe]
zu verwenden? Für erste Tests gern auch großzügiger, einschränken ließe sich das dann ja immer noch. Mit diesem Attribut unterdrückst Du, dass der Compiler etwas freigibt, bevor es anderweitig referenziert wird.

Anwendungsbeispiele:
Delphi-Quellcode:
var [Unsafe] Obj1: TObject;
///
[Result: Unsafe] function GetObject: TObject;

arnof 21. Mai 2013 08:11

AW: IOS Compiler Bug ??? ARC
 
Danke für die Tipps, ich werde das mit unsafe mal versuchen, ansonsten mache ich mal ein Beispiel Projekt da das echte zu Komplex ist.

arnof 23. Mai 2013 07:20

AW: IOS Compiler Bug ??? ARC
 
Erstmal vielen Dank, durch den massiven Einsatz von Unsafe habe ich nun alle Schutzverletzungen entfernen können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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