Deutsch
Stammtisch & Café

Dim, ein paar Fragen...

 
- Seite 1 -



Jörg
Sellmeyer
Das hier funktioniert. SizeOf ermittelt auch den richtigen Wert. Bei String$(B#,0) wird jedoch trotzdem immer der ganze String ausgegeben:
KompilierenMarkierenSeparieren
Declare B#
Dim B#,11
String B#,0 = "0123456789"
Print Char$(B#,0,SizeOf(B#) - 1)
Dim B#,6
Print Char$(B#,0,SizeOf(B#) - 1)
WaitInput

Profanhilfe
Der Befehl kann ab XProfan 10 mehrmals auf eine Bereichsvariable angewandt werden und ändert dynamisch die Größe des Speicherbereiches.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
30.08.2008  
 



 
- Seite 2 -


Was hat ein NullByte mit der Redimensionierung zu tun?

Ein Print String$(B#,0) ist absolut nicht aussagekräftig da es hier bis zu einem NullByte liesst.

Wenn man in einem Bereich ein Null-Byte benötigt, weil eine Funktion wie string$ bis dort hin liesst, dann sollte man das NULL-Byte setzen.

Oder kappier ich nur etwas nicht?
 
31.08.2008  
 




Jörg
Sellmeyer
Wenn Profan einen Bereich dimensioniert, liest String$(...) den immer bis zu korrekt eingestellten Größe des Bereichs aus. Das macht es aber nicht mehr, wenn der Bereich neu dimensioniert wurde. Das hat nix damit zu tun, ob ich ein NullByte benötige, da das Abschlußbyte ja sonst auch von Profan gesetzt wird.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.08.2008  
 



Jörg Sellmeyer
Wenn Profan einen Bereich dimensioniert, liest String$(...) den immer bis zu korrekt eingestellten Größe des Bereichs aus.


Wird nicht hauptsächlich bis zu einem Byte 0 gelesen?
 
31.08.2008  
 




RGH
String$ liest bis zum ersten Byte(0), Char$ die angegebene Anzahl Zeichen.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
31.08.2008  
 




Jörg
Sellmeyer
Irgendwie drehen wir uns jetzt im Kreis, oder? Natürlich wird bis zum ersten NullByte gelesen. Wenn dimensioniert wird, wird diese Byte aber automatisch an die letzte Stelle gesetzt. Warum sollte Dim das bei der zweiten Anwendung anders machen. außerdem hat String$(...) so Zugriff auf Speicher, der schon nicht mehr zum Programm gehört. Das sollte meiner Meinung nicht sein. Nach dem zweiten Dim ist die Funktion String$ praktisch nutzlos.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.08.2008  
 




Frank
Abbing
Jörg hat es genauso gesagt wie es ist. Das zweite String$ liest aus unerlaubtem Speicher. Die Redimensionierung ist in dieser Form fehlerhaft.
 
31.08.2008  
 



Es geht also nur darum, bei einer Vergrößerung des Speicherbereiches, den angehangenen Teil mit Null zu füllen?
 
31.08.2008  
 




Jörg
Sellmeyer
Nein!!! Es geht darum, bei einer Verkleinerung ein Nullbyte einzufügen:
Ein Bereich wird deklariert:
KompilierenMarkierenSeparieren
Declare Bereich#

Dann wird er dimensioniert:
KompilierenMarkierenSeparieren
Dim Bereich#,10

Dann sieht Bereich nach meinem Verständnis so aus:

0|0|0|0|0|0|0|0|0|z

Wobei 0 auch beliebige Daten sein können, die gerade an der Stelle im Speicher stehen. Es ist ja nicht mit Clear Bereich gelöscht.
Jetzt schreibe ich was rein:
KompilierenMarkierenSeparieren
String Bereich#,0 = "123456789"

Jetzt müßte Bereich so aussehen:

1|2|3|4|5|6|7|8|9|z

jetz neu dimensionieren:
KompilierenMarkierenSeparieren
Dim Bereich#,6

Um korrekt zu funktionieren müßte Bereich jetzt so aussehen:

1|2|3|4|5|z

der Speicher dahinter ist jetzt abgetrennt - der gesamte Bereich sollte jetzt so aussehen:

1|2|3|4|5|z7|8|9|z

Profan hat also weder durch Char$ - das bei Überschreiten der Speichergrenze meckert - noch durch String$ Zugriff auf den Speicher hinter Bereich.

Der gesamte Speicherbereich sieht aber immer noch so aus:

1|2|3|4|5|6|7|8|9|z

Sonst hätte Profan keinen Zugriff per String auf den restlichen Teil.
Wenn ich wieder vergrößere, sieht es wieder so aus (sollte):

1|2|3|4|5|z7|8|9|z

Das Nullbyte ist natürlich immer noch drin und jetzt ist der Programmierer gefordert, seine Daten vernünftig auszulesen/einzutragen.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.08.2008  
 



Das Redim kann sich doch aber nicht am string$ oder char$ orientieren.

Auf Speicher, der nicht reserviert ist darf nicht zugegriffen werden - das darf man jetzt hier aber nicht vermischen.

Wenn ein 10 Byte Speicherbereich

HALLO WELT

auf 5 Byte redimensioniert wird, dann muss das Ergebnis unbedingt (und natürlich)

HALLO

sein, und nicht

HALLz

Ich finde XProfan reagiert hier völlig korrekt - ich würde es erwürgen wenn es hier den Speicher selbst verändert.

Was Ihr wollt macht man schliesslich selbst, indem man eben nicht auf 5 sondern 6 dimensioniert und das z-Byte selbst in den Speicher schreibt bevor man z.B. String$ drüberjagt...
 
31.08.2008  
 




Frank
Abbing
iF versteht es noch nicht, herje! Wichtiger ist aber, dass Roland es versteht.
Warum wird bei einem 5 Byte grossen Speicher ein 9 Byte grosser Text in den String kopiert? Ist doch echt nicht sooo schwer...
 
31.08.2008  
 



Frank Abbing
Warum wird bei einem 5 Byte grossen Speicher ein 9 Byte grosser Text in den String kopiert?


Nach welchem Beispiel? Das hier bricht korrekt ab:
KompilierenMarkierenSeparieren
 {$cleq}
cls
mem test=5
string test#,0="HALLO WELT"
print string$(test,0)
waitkey
end

Frank Abbing
Wichtiger ist aber, dass Roland es versteht.


Hast Du den Thread verfolgt?

Es ist doch ganz anders. Es ist gefährlich die Funktion String$ auf einen Bereich loszulassen (wenn keine weitere Prüfung enthalten ist) bei dem nicht sichergestellt ist, das er mit einem Nullbyte endet. Dim jedoch hat hier garnichts an Veränderungen des Speicherinhalts zu tun...
 
31.08.2008  
 




Jörg
Sellmeyer
Nein, es ist eben nicht gefährlich, da Dim den Bereich automatisch mit einem NullByte abschließt. Erst ein erneutes Dim macht es gefährlich. Aber ich hab jetzt alles gesagt, was ich dazu zu sagen habe. Soll Roland sich überlegen, ob er Zugriff auf Speicher außerhalb des Programms als Bug oder Feature ansieht.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.08.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

27.761 Betrachtungen

Unbenanntvor 0 min.
Michaeal21.03.2012

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie