Bug in AllocateMemory - PB 5.51

Just starting out? Need help? Post your questions and find answers here.
Toshy
User
User
Posts: 15
Joined: Fri Feb 17, 2006 3:38 am

Bug in AllocateMemory - PB 5.51

Post by Toshy »

german thread: http://www.purebasic.fr/german/viewtopi ... 20&t=30040
Sorry, my english is to bad.

Purebasix 5.51 x64
Compiler-Optionen auf Standard
Windows 10

Start mit F5, also Debugger läuft.

Code: Select all

  *MemoryID = AllocateMemory(5000)
  If *MemoryID
    Debug "Startadresse des 5000 Byte Speicherbereichs ist:"
    Debug *MemoryID
    PokeS(*MemoryID, "Wir speichern diesen String im Speicherbereich")
    FreeMemory(*MemoryID)  ; wird am Ende des Programms auch automatisch erledigt
  Else
    Debug "Konnte den angeforderten Speicher nicht reservieren!"
  EndIf
Klappt alles. Programm läuft normal durch.

Code: Select all

*MemoryID = AllocateMemory(88)
  If *MemoryID
    Debug "Startadresse des 5000 Byte Speicherbereichs ist:"
    Debug *MemoryID
    PokeS(*MemoryID, "Wir speichern diesen String im Speicherbereich")
    FreeMemory(*MemoryID)  ; wird am Ende des Programms auch automatisch erledigt
  Else
    Debug "Konnte den angeforderten Speicher nicht reservieren!"
  EndIf
Meldung:

Code: Select all

PureBasic Debugger
Das mit dem Debugger getestete Executable endete unerwartet.
Alle Werte von 1-88 Bytes größe brechen die Ausführung ab.

Auch ohne Debugger schmiert das Programm ab.

Gar nicht lustig ;-)
Kann das jemand nachvollziehen?
!! sorry, i only speak some words in english. !!
1. AMD,3 GB MB-RAM,WinXP
2. Linux-TabletPC
Inet: 7 Kbyte/s Down/7Kbyte (not MBit) Up
PB4.6x
Messenger: Trillian (yahoo, skype, MSN/Live,icq)
User avatar
nco2k
Addict
Addict
Posts: 1344
Joined: Mon Sep 15, 2003 5:55 am

Re: Bug in AllocateMemory - PB 5.51

Post by nco2k »

dein string ist 46 zeichen lang. ein unicode zeichen besteht aus 2 byte. das sind also 92 byte für deinen string + 2 byte für die nullterminierung. du versuchst 94 byte in einen buffer zu schreiben, der nur 88 byte gross ist.

Code: Select all

Debug StringByteLength("Wir speichern diesen String im Speicherbereich") + SizeOf(Character)
Debug (Len("Wir speichern diesen String im Speicherbereich") + 1) * SizeOf(Character)

Code: Select all

*MemoryID = AllocateMemory(94)
If *MemoryID
  Debug "Startadresse des 5000 Byte Speicherbereichs ist:"
  Debug *MemoryID
  PokeS(*MemoryID, "Wir speichern diesen String im Speicherbereich")
  FreeMemory(*MemoryID)  ; wird am Ende des Programms auch automatisch erledigt
Else
  Debug "Konnte den angeforderten Speicher nicht reservieren!"
EndIf
c ya,
nco2k
If OSVersion() = #PB_OS_Windows_ME : End : EndIf
Post Reply