PB3.94 u. PB4b11 Bug: PokeB und PokeS machen Fehler

Fragen und Bugreports zur PureBasic 4.0-Beta.
Torakas
Beiträge: 63
Registriert: 13.09.2004 09:56

PB3.94 u. PB4b11 Bug: PokeB und PokeS machen Fehler

Beitrag von Torakas »

Hi Leute,

bin gerade dabei die SNMP Library für PB4 umzuschreiben und hab dabei einen Fehler entdeckt der nicht sein sollte.

Hier mal der Code dazu

Code: Alles auswählen

*test = AllocateMemory(1024)

PokeS(*test + 0, "1", 1)
PokeS(*test + 1, "2", 1)
PokeS(*test + 2, "3", 1)
PokeS(*test + 3, "4", 1)
PokeS(*test + 4, "5", 1)

; Fehlerfreie Ausgabe
Debug PeekS(*test)

; Aendere zweite Stelle durch das selbe Zeichen
; sollte keine Aenderung geben
PokeS(*test + 1, "2", 1)

; Ausgabe was jetzt rauskommt
Debug PeekS(*test)

; Gib einfach mal den Ascii Wert aus um zu sehen was jetzt drinne ist
Debug ""
For i = 0 To 4
  Debug Asc(PeekS(*test + i, 1))
Next i
Wenn ich an der selben stelle ein Byte aendern will und sogar noch mit dem selben Zeichen dann sollte sich in der ausgabe nichts aendern, aber er fügt einfach nach der Stelle ein chr(0) ein und ueberschreibt damit den anderen Wert.

Desweitern hab ich bemerkt wenn man z.B. zuwenig speicher mit AllocateMemory reserviert kann man trotzdem beliebig viele Zeichen in den Speicher schreiben....

Kann mir vorstellen das es normal ist, auch in anderen Sprachen wie in C z.B., nur das der Programmierer selber aufpassen muss was er machen muss. Sonst kann es evtl zu einer Speicherverletzung kommen.

Aber der Bug oben sollte nicht sein... Bitte PRüfen und dann weiterleiten wenn es sich bestätigt. Kann sein das es in den anderen Pokebefehlen auch so ist und nicht nur bei PokeB und PokeS

Gruß,
Torakas
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@Torakas
Aus der PB-Hilfe zu PokeS:
Für fortgeschrittene Programmierer. Schreibt einen String (einschließlich einer abschließenden '0') an die angegebene Speicheradresse.

Ein optionaler Parameter 'Laenge' (in Bytes) kann angegeben werden, welcher die Länge des Strings angibt, trotzdem wird nach dem geschriebenen ('poked') String noch eine Null angehängt (d.h. die Angabe von 6 wird 7 Bytes schreiben, 6 für den String, und das letzte Byte wird Null sein).
Das ist richtig und so gewollt. Wenn Du das vermeiden willst, dann nutze nicht PokeS sondern PokeB!

Einen Speicherschutz hat PB meines Wissens nicht implementiert. Da muss man als Programmierer selbst aufpassen. Geht das ganze über den der Task eingeräumten Speicherbereich hinaus, dann passt Windows auf.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Torakas
Beiträge: 63
Registriert: 13.09.2004 09:56

Beitrag von Torakas »

Danke, hat geholfen.
Gesperrt