Purifier Bug mit AllocateMemory und ProcedureReturn

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Purifier Bug mit AllocateMemory und ProcedureReturn

Beitrag von Blackskyliner »

Hallo, ich habe folgenden Code

Code: Alles auswählen

Procedure.i _MemAllocWrapper(Size.l, File.s, Line.l)
	Debug File+"["+Str(Line)+"]"+": Memory Allocated - Size( "+Str(Size)+" )"
	ProcedureReturn AllocateMemory(Size)
EndProcedure

*mem = _MemAllocWrapper(1000,#PB_Compiler_File, #PB_Compiler_Line)

FreeMemory(*mem)
Welcher mit aktiviertem Purifier unter Ubuntu 10.04LTS x86 und Purebasic 4.50 x86 einen IMA beim ProcedureReturn ergibt.
Sobald ich allerdings beide Parameter aus der Funktion raus nehme, so das ich nur noch Size angebe, dann bekomme ich keine IMA mehr...

Unter Windows scheint alles zu Funktionieren.

Grade nochmal getestet, erst sobald die Funktion als Parameter einen String mit erwartet, bekomme ich einen IMA, solange die Parameter nur Longs sind, klappt das einwandfrei.

Sollte ein Bug sein, da dies ein Verhalten ist, was ich mir nicht erklären kann...

EDIT: oder tritt da dieser Fall ein, hab grad nochmal im DevBlog rumgestöbert, weil ich mir überlegt hab mal das "Purify It!" zu übersetzen, denn viele hier scheinen gar nicht zu wissen was der Purifier ist, bzw. was er macht, geschweige denn dass es ihn gibt...
There are some limitations tough: threaded program could report wrong line and if a pointer is really filled with a random value, it won’t be noticed by it (but probably by the debugger as IMA – Invalid Memory Access).
Könnte es also sein das hier der Fall der "random value" eintritt und ich deshalb einen IMA bekomme?

EDIT2:
Liegt definitiv nich an mir oder dem Speicher, sondern am Purifier, der kommt echt mit einem Stringparameter nicht klar.

Code: Alles auswählen

Procedure.i _MemAllocWrapper(Size.l, File.s);, Line.l)
	Debug File+"["+Str(Line)+"]"+": Memory Allocated - Size( "+Str(Size)+" )"
	Protected *temp = AllocateMemory(Size)
	FillMemory(*temp, Size) ;No random data anymore...
	ProcedureReturn *temp
EndProcedure

*mem = _MemAllocWrapper(1000, #PB_Compiler_File);, #PB_Compiler_Line)

FreeMemory(*mem)
MFG
Blackskyliner
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher