Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

array-udt-problem

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Domso



Anmeldungsdatum: 02.02.2011
Beiträge: 109

BeitragVerfasst am: 09.09.2012, 11:14    Titel: array-udt-problem Antworten mit Zitat

Hi zusammen

ich habe ein kleines problem mit diesem code
Code:

Type udt_type
   As integer var1(1 To 10)
End Type
Dim As udt_type typ(1 To 10)

For k As Integer = 1 To 10
   typ(1).var1(k)=1
Next

Dim As double var2=-2
Dim As Integer var3=-2
Dim As Integer var4=((var3+1)*-1)

For k As Integer = 1 To 10
   Print typ(((-2)+1)*-1).var1(k)
   Print typ((var3+1)*-1).var1(k)
   Print typ((var2+1)*-1).var1(k)
   Print typ(var4).var1(k)
   Print "------"
Next

sleep

Eigentlich sollte das Programm jeweils 4x den selben wert anzeigen,
aber der 2. ist falsch
Wo liegt hier genau der Fehler, weil
eigentlich steht ja 4x das selbe dran... nur anders formatiert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 09.09.2012, 11:57    Titel: Antworten mit Zitat

Ehrlich gesagt bin ich mir nicht ganz sicher aber lehne mich mal ein bisschen aus dem Fenster happy

-2 + +1 = -1
-1 * -1 ergibt tja.. 1? -1? scheinbar ist sich FBC genauso unsicher wie ich, das ergebnis in Var4 und auch eine rechnung einfach per print ergeben 1 aber irgendwie ist mir das 1*1 konzept hier als würde etwas anders laufen und intern ergibt das ganze -1 was ausserhalb des speichers (1 to 10) liegt und somit zu dem fehlerhaften Ergebnis kommt oder abstürzen...

Edit: was ich meine; wollte ich durch Berechnungen 'vroteile' in sachen performance erziehlen, würde ich ein *1 einfach weglassen weil unsinnig und wie gesagt, weit aus dem fenster gelehnt... FBC könnte da ähnlich 'denken'
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 09.09.2012, 12:24    Titel: Antworten mit Zitat

Es dürfte sich hierbei um einen Compiler Bug handeln. Alle Indizes ergeben 1 und sind damit gültig, allerdings stimmt die Pointeradresse im Fall von "var3" nicht. Ich hab den Code mal aufgearbeitet und werde es mal dem FreeBASIC Chefentwickler melden.
Code:
Type udt_type
   As Integer var1(1 To 10)
End Type
Dim As udt_type typ(1 To 1)

'Set all var1() of typ(1) to 1
For i As Integer = 1 To 10
   typ(1).var1(i) = 1
   Print "Index " & i & " = " & typ(1).var1(i)
Next
Print "Press any key":Print
Sleep

Dim As Double  var2 = -2 'works with double
Dim As Integer var3 = -2 'doesn't work with integer
Dim As Integer var4 = ((var3 + 1) * -1)

For i As Integer = 1 To 10
   Print "Index " & i & ":"
   '              index of typ()            index of var()      value                                   adress
   Print "typ(" & (((-2) + 1) * (-1)) & ").var(" & i & ") = " & typ(((-2) + 1) * (-1)).var1(i) & " @" & @typ(((-2)+1)*(-1))
   Print "typ(" & ((var2 + 1) * (-1)) & ").var(" & i & ") = " & typ((var2 + 1) * (-1)).var1(i) & " @" & @typ((var2+1)*(-1))
   Print "typ(" & ((var3 + 1) * (-1)) & ").var(" & i & ") = " & typ((var3 + 1) * (-1)).var1(i) & " @" & @typ((var3+1)*(-1))
   Print "typ(" & (var4)              & ").var(" & i & ") = " & typ(var4).var1(i)              & " @" & @typ(var4)
   Print "typ(" & (1)                 & ").var(" & i & ") = " & typ(1).var1(i)                 & " @" & @typ(1)
   Print "------"
Next
Sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Domso



Anmeldungsdatum: 02.02.2011
Beiträge: 109

BeitragVerfasst am: 09.09.2012, 14:34    Titel: Antworten mit Zitat

ok, thx... dann liegts nicht an mit grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dkl
FreeBASIC-Compiler-Entwickler


Anmeldungsdatum: 25.04.2010
Beiträge: 14
Wohnort: Germany

BeitragVerfasst am: 12.09.2012, 01:59    Titel: Antworten mit Zitat

Dieses Problem sollte jetzt behoben sein: fbc commit c33f34f8

Das "* -1" im Arrayzugriff sorgt blöderweise für einen negativen Indexfaktor, der von den Arrayzugriffoptimierungen nicht richtig behandelt wurde. Der negative Faktor wurde an den ASM emitter weitergegeben, obwohl der damit nicht umgehen kann, und den Faktor dann auch direkt ignoriert hat, und da war der Index beim Arrayzugriff dann natürlich falsch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz