Aktuelle Zeit: 18.06.2019 01:37

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 09:54 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Moin Kollegen,

mir fiel gerade etwas auf von dem ich nicht genau weiß, ob man es als Bugreport einstellen sollte.

Wird innerhalb einer Prozedur ein Array als Global deklariert und außerhalb der Prozedur noch vor Aufruf der Prozedur auf das Array zugegriffen, dann wird dies vom Compiler nicht bemängelt. Man merkt es erst, wenn das Compilat mit einem Speicherzugriffsfehler abstürzt.

Code:
EnableExplicit

Procedure Test()
   Global Dim MyArray.s(1)
   MyArray(0) = "Hello"
EndProcedure

; Test()

Debug MyArray(0)

Test()

Zum Testen einfach mal die auskommentierte Zeile 8 ein-/auskommentieren.
Das sollte der Compiler doch eigentlich bemerken, oder?

Gruß Kurzer

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 09:59 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
Kurzer hat geschrieben:
Das sollte der Compiler doch eigentlich bemerken, oder?

Auf jeden Fall.

_________________
BildBildBildBildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 10:02 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Kling definitiv nach einem Bug.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 10:07 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Danke für die Einschätzung, ich habe das jetzt im englischen Forum als Bug gemeldet.

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 21:59 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Ich weiss nicht ob es ein Bug ist...

Das Array wird erst der Speicher reserviert wenn auch DIM aufgerufen wird.
Wenn dieses erst in einer Procedure erfolgt, ist der Speicher dann erst verfügbar...

Anderer logischer Fehler...
Code:
EnableExplicit

Procedure Test()
   Global Dim MyArray.s(1)
   MyArray(0) = "Hello"
EndProcedure

 Test()

Define a.s = MyArray(2)

Test()

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 22:06 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
Global innerhalb einer Prozedur zu schreiben ist m.E. schlechter Programmierstil und hat zur Folge, dass das Programm schlechter pflegbar ist.
Wenn es nach mir ginge, würde der Compiler das schon gar nicht durchgehen lassen.

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 22:17 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Ich denke mk-soft hat recht, denn definiert ist das array ja, auch wenn die funktion nicht aufgerufen wird:
Code:
EnableExplicit

Procedure Test()
   Global Dim MyArray.s(1)
   MyArray(0) = "Hello"
EndProcedure

Debug ArraySize(MyArray()) ; -1
;Test()
Debug ArraySize(MyArray()) ; -1 / 1

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 22:26 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Ich gebe Nino recht, dass das schlechter Programmierstil ist. :wink:
Und ich vermute weiterhin, dass das vom Compiler nicht gemeldet wird, weil es ein 1 Pass Compiler ist. Wobei er die verschiedenen Scopes bei Modulen ja auch einwandfrei tracen kann, hmmm.

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 22:38 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
noch ein Beispiel..
Code:
EnableExplicit

Declare test2()
Declare test3()

Procedure test()
  test2()
  Global Dim MyArray.s(1)
  test3()
EndProcedure

Procedure test2()
  Debug ArraySize(MyArray()) ; -1
EndProcedure

Procedure test3()
  Debug ArraySize(MyArray()) ;  1
EndProcedure

test()

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 22:46 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Kurzer hat geschrieben:
Und ich vermute weiterhin, dass das vom Compiler nicht gemeldet wird, weil es ein 1 Pass Compiler ist. Wobei er die verschiedenen Scopes bei Modulen ja auch einwandfrei tracen kann, hmmm.
Ob die Funktion aufgerufen wird, kann von der Laufzeit abhängen, bzw kann der Compiler nicht wissen.
Code:
If Random(1) : test() : EndIf

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye