Deutsch
Bugs und vermeintliche

Stringpointer in PROC's

 

Uwe
''Pascal''
Niemeier
Hallo Leute!

Hier eine Sache, die mir schon vor längerer Zeit aufgefallen ist
(Vielleicht habe ich mich sogar schonmal drüber beschwert):
Wird an eine Prozedur eine Stringvariable übergeben, so wird nicht der Inhalt der Variable übermittelt, sondern der Pointer der Zielvariable mit der des Parameters gleichgesetzt:
window 300,300

proc Test'------------------------------Test

    parameters a$
    'a$=a$+""'--Einfacher Workaround; damit bekommt a$ einen eigenen Pointer
    string addr(a$),0="Hallo"

endproc'-----------------------------------

var b$="Laber"
print b$
Test b$
print b$
waitinput

Das kann bisweilen für Verwirrung sorgen...
Ich falle jedenfalls immer wieder mal drauf rein

SeeYou
Pascal
 
26.10.2010  
 



Dank oder per Garbage-Collection ist dies ein Feature für mehr Speed,

ich habe das vermutlich wie es in Delphi funzt oder so ähnlich nachprogrammiert und mache es mit nProcs absichtlich ganz ähnlich auch für 100% Kompa zu XProfan. Rückgabewerte ähnlich lustig. Solche Strings haben für sowas drum auch einen Referenzzähler vorn am Speicher.
 
26.10.2010  
 



Ich nehm alles zurück und behauptes Gegenteil, habs für nProcs eben genau _nicht so gemacht sondern dort hat jeder StringParam eigene Adresse... ist aber vermutlich "Wurscht" da Du imho mit nProcs (vielleicht ja "noch") nix rumgewurstelt hast. ^^
 
26.10.2010  
 




Uwe
''Pascal''
Niemeier
Hi iF!

Mir ging es auch weniger um das Für und Wider, sondern darum, daß man als Programmierer dieses Verhalten nicht erwartet. Wer rechnet schon damit, das eine Prozedur einen übergebenen Originalparameter quasi durch die Hintertür ändert?

Wenn's denn so sein muß, sollte an entsprechender Stelle darauf hingewiesen werden.


ist aber vermutlich "Wurscht" da Du imho mit nProcs (vielleicht ja "noch") nix rumgewurstelt hast.


Es gibt noch viel zu tun...

SeeYou
Pascal
 
29.10.2010  
 




RGH
Hallo,

wenn man inm der Prozedur die Stringzuweisung "normal" macht und nicht über die Adresse, dann klappt das auch wie erwartet, d.h. der ursprüngliche String wird nicht verändert:
window 300,300

proc Test'------------------------------Test

    parameters a$
    a$ = "Hallo"

endproc'-----------------------------------

var b$="Laber"
print b$
Test b$
print b$
waitinput

Als Programmierer (Delphi, Java, C++) erwarte ich eigentlich bei Strings eher, dass sie nicht immer reagieren wie erwartet! ;) Da gibt es ganz böse Fallen! Gerade Delphi hat mich da manchmal schon zur Verzweiflung getrieben. Und wer Variablen über ihre Adressen etwas antut, muss wissen, dass es wie ehedem mit PEEK und POKE bei Basic ist: Es können unbedachte Dinge passieren. ;)

Aber ich schau mal, ob es ohne große Schmerzen (immerhin geht es a) um die Releaseversion und b) um ein Verhalten was schon seit über 10 Jahren (Einführung der langen Strings mit 7.0 im April 2000) keine bekannten Probleme verursachte.

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
30.10.2010  
 




Uwe
''Pascal''
Niemeier
Hi Roland!


...um ein Verhalten was schon seit über 10 Jahren (Einführung der langen Strings mit 7.0 im April 2000) keine bekannten Probleme verursachte


Ist ja auch nicht jeder so am Rumbasteln wie ich

Wie gesagt: Wenn man's weiß, kann man sich ja drauf einstellen (es sei denn, man vergisst es dauernd wieder )

SeeYou
Pascal
 
30.10.2010  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.545 Betrachtungen

Unbenanntvor 0 min.
H.BrillVorgestern (17:35)
Christof Neuß13.09.2018
funkheld07.04.2016
Georg Teles14.10.2014
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Uwe ''Pascal'' Niemeier (3x)
iF (2x)
RGH (1x)


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