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:

absturz mit POINT oder Array

 
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
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 06.03.2013, 12:15    Titel: absturz mit POINT oder Array Antworten mit Zitat

ich hab ein Grafikpuffer erstellt aus dem ich mit Point die roten Pixel auslesen möchte. mit ein paar tests hab ich gemerkt das das auch geht aber nicht immer. entweder schmiert das prog sofort ab oder nach einigen pixelprüfungen. bremse ich den code mit sleep und gedrückter taste aus, stürzt das prog immer bei zeile 3 und spalte 29 ab.

betreffende stelle ist die unterste doppelte for-next
Code:
Imgtxt = Imagecreate(360, 9)
Draw string Imgtxt, (1, 1), "hier der text", &haa0000

For i = 1 To 60                      '8
        With mycube(i).crd
                Read .x,.y,.z
        End With
Next

Dim As Single winkel=Atn(1)*4/180 'PI=Atn(1)*4 , PI/15 => 12° (15 * 2 = 30 schritte)

Type kreispunkte360
  nxk AS Integer
  nyk AS Integer
END Type
DIM kp(360) AS kreispunkte360

for i = 1 to 360
  kp(i).nxk = (0 + 50 * cos(i*winkel)) / 50
  kp(i).nyk = (0 + 50 * sin(i*winkel)) / 50
next

hoehenk = .06   
for i = 1 to 9
  for j = 1 to 360
    IF Point (j, i, Imgtxt)= 11141120 then
      ij += 1
      With mycube(ij).crd
        .x = kp(j).nxk
        .y = kp(j).nyk
        .z = hoehenk
      End With
    END IF
   
  next j
  hoehenk -= .02
next i

ImageDestroy Imgtxt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Eternal_pain



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

BeitragVerfasst am: 06.03.2013, 12:20    Titel: Antworten mit Zitat

imagecreate(360,9) geht von 0 bis 359 und 0 bis 8...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

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

ok. aber wieso läuft er dann 2x bis 360 durch und schmiert dann erst in zeile 3 bei spalte 29 ab - wenn ich ein sleep hinter dem ersten next habe sonst halt früher oder gar sofort.

EDIT

hmm hab das draw string imgtxt jetzt auf 0,0 gesetzt und
FOR i = 0 to 8
und
FOR j = 0 to 359

schmiert sofort ab


Zuletzt bearbeitet von braesident am 06.03.2013, 12:28, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Eternal_pain



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

BeitragVerfasst am: 06.03.2013, 12:27    Titel: Antworten mit Zitat

Es kann auch 100x gut gehen und dann greifst Du auf einen Geschützen Speicherbereich zu und BUMS alles schmiert ab...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Eternal_pain



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

BeitragVerfasst am: 06.03.2013, 12:37    Titel: Antworten mit Zitat

Hast Du auch einen Screen initialisiert bevor Du Imagecreate benutzt?

Code:
screenres 800,600,32

Dim Imgtxt as any ptr = Imagecreate(360, 9)
Draw string Imgtxt, (0, 0), "hier der text", &hAA0000 'X (13*8=104) x Y (8)


for i as Integer = 0 to 8
  for j as Integer = 0 to 359
   
    IF Point(j, i, Imgtxt) = &hAA0000 then
      pset(100+j,100+i),&hFFFFFF
    END IF
   
  next j
next i

ImageDestroy Imgtxt
sleep


Ansonsten würd ich auch deine anderen Arrays mal überprüfen...
ggf mal mit -exx kompilieren...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 06.03.2013, 17:35    Titel: Antworten mit Zitat

Screenres ist im moment 800, 500, 32

-exx probier ich nachher gleich aus , hab gerade noch nen bissel zu tun
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 06.03.2013, 19:58    Titel: Antworten mit Zitat

also ich habs mit -exx probiert - prog schließt sofort wieder und es gibt keine fehlermeldung.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 06.03.2013, 20:02    Titel: Antworten mit Zitat

Zitat:
und es gibt keine fehlermeldung

Starte das Programm mal von der Konsole aus.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 06.03.2013, 20:23    Titel: Antworten mit Zitat

meinst du in der FBIde mit F5 - das mach ich die ganze Zeit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 06.03.2013, 20:40    Titel: Antworten mit Zitat

Keine Ahnung, was FBIDE genau macht - ich glaube aber nicht, dass es dir diese Möglichkeit bietet. Starte mal die Windows-Konsole und rufe das Programm von dort aus auf.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 06.03.2013, 21:01    Titel: Antworten mit Zitat

da sagt er mir:

Aborting due to runtime error 6 (out of bounds array accsess) at line 319

zeile 319
Code:
      With mycube(ij).crd


Code:
for i = 0 to 8
  for j = 0 to 359
    IF Point (j, i, Imgtxt)= 11141120 then
      ij += 1
      With mycube(ij).crd
        .x = kp(j+1).nxk
        .y = kp(j+1).nyk
        .z = hoehenk
      End With
    END IF
   
  next j
  hoehenk -= .02
next i


Der Hauptquellcode stammt von TJF aus dem Portal 3D ohne Libs
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 06.03.2013, 21:06    Titel: Antworten mit Zitat

braesident hat Folgendes geschrieben:
wieso läuft er dann 2x bis 360 durch und schmiert dann erst in zeile 3 bei spalte 29 ab

wie ist denn mycube(ij).crd dimensioniert?
Nach deiner Aussage schmiert es bei ij=749 ab?

EDIT
genau -> out of bounds array accsess
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 07.03.2013, 00:06    Titel: Antworten mit Zitat

der startwert von ij sollte 60 sein, da mycube bis 60 mit den eckdaten des rohen objekts gefüllt wird.
Code:
DIM SHared AS Integer ij = 60

Imgtxt = Imagecreate(360, 9)
Draw string Imgtxt, (1, 1), "hier der text", &haa0000

For i = 1 To 60                      '8
        With mycube(i).crd
                Read .x,.y,.z
        End With
Next


ij soll jetzt immer um 1 erhöht werden wenn im Img ein roter Pixel gefunden wird.
Code:
hoehenk = .06
for i = 0 to 8
  for j = 0 to 359
    IF Point (j, i, Imgtxt)= 11141120 then
      ij += 1
      With mycube(ij).crd
        .x = kp(j+1).nxk
        .y = kp(j+1).nyk
        .z = hoehenk
      End With
    END IF
   
  next j
  hoehenk -= .02
next i


EDIT/
aber die frage war trotzdem die richtige verlegen
ij war zwar nur bis 93 gekommen und nicht wie angenommen bis 749, aber totzdem schon viel zu hoch
Code:
Dim Shared mycube(86) As vert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
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