| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	
	
	
		| Autor | 
		Nachricht | 
	
	
		braesident
 
 
  Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
  | 
		
			
				 Verfasst am: 06.03.2013, 11:15    Titel: absturz mit POINT oder Array | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	
	
		  | 
	
	
		Eternal_pain
 
  
  Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
  | 
		
			
				 Verfasst am: 06.03.2013, 11:20    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				imagecreate(360,9) geht von 0 bis 359 und 0 bis 8... _________________
   | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		braesident
 
 
  Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
  | 
		
			
				 Verfasst am: 06.03.2013, 11:24    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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, 11:28, insgesamt einmal bearbeitet | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		Eternal_pain
 
  
  Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
  | 
		
			
				 Verfasst am: 06.03.2013, 11:27    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Es kann auch 100x gut gehen und dann greifst Du auf einen Geschützen Speicherbereich zu und BUMS alles schmiert ab... _________________
   | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		Eternal_pain
 
  
  Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
  | 
		
			
				 Verfasst am: 06.03.2013, 11:37    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	
	
		  | 
	
	
		braesident
 
 
  Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
  | 
		
			
				 Verfasst am: 06.03.2013, 16:35    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Screenres ist im moment 800, 500, 32
 
 
-exx probier ich nachher  gleich aus , hab gerade noch nen bissel zu tun | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		braesident
 
 
  Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
  | 
		
			
				 Verfasst am: 06.03.2013, 18:58    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| also ich habs mit -exx probiert - prog schließt sofort wieder und es gibt keine fehlermeldung. | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		nemored
 
  
  Anmeldungsdatum: 22.02.2007 Beiträge: 4712 Wohnort: ~/
  | 
		
			
				 Verfasst am: 06.03.2013, 19:02    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	
	
		  | 
	
	
		braesident
 
 
  Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
  | 
		
			
				 Verfasst am: 06.03.2013, 19:23    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| meinst du in der FBIde mit F5 - das mach ich die ganze Zeit. | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		nemored
 
  
  Anmeldungsdatum: 22.02.2007 Beiträge: 4712 Wohnort: ~/
  | 
		
			
				 Verfasst am: 06.03.2013, 19:40    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	
	
		  | 
	
	
		braesident
 
 
  Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
  | 
		
			
				 Verfasst am: 06.03.2013, 20:01    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	
	
		  | 
	
	
		volta
 
 
  Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
  | 
		
			
				 Verfasst am: 06.03.2013, 20:06    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	
	
		  | 
	
	
		braesident
 
 
  Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
  | 
		
			
				 Verfasst am: 06.03.2013, 23:06    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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    
 
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 | 
		 | 
	
	
		  | 
	
	
		 |