Seite 1 von 1

Invaild Memory Access

Verfasst: 30.03.2007 17:33
von D4uS1
Ich habe ein Register für meine Filme erstellt, da ich nicht mehr durch die Massen an DVD's die ich besitze durchblicke. In diesem Register kann man neue Filme einfügen, ältere Bearbeiten und so weiter. Die Liste in der die Filme angezeigt werden besteht aus einem Array. Die Filme Selber aus einem Element mit einer eigens gewählten Struktur. Das ganze sieht dann so aus das ich den Computer Prüfen lasse ob er eins der Abschnitte in der Liste anklickt. Ist dies der Fall so wählt er diesen aus und stellt an der Stelle eine kleine Grafik dar. Doch nun kommt das was bei mir nicht funktioniert. Anhand des gewählten Abschnittes soll der Film ausgewählt werden. Dies habe ich mit dem Begriff ChangeCurrentElement(Film(), x) gemacht. Doch wenn ich nun das Programm starte, beendet es sobald ich eine auswahl getroffen habe und PB gibt mir die Meldung "Invaild Memory Access".

Hier ein Beispielcode

Code: Alles auswählen


InitSprite()
initMouse()

OpenScreen(1024, 768, 16, "Filmregister")

Structure s_Liste
 x.w
 y.w
 Auswahl.l
endStructure

Structure s_Film
 Name.s
 Schauspieler.s
 ...
 ...
endStructure

Global B_Listenabschnitt.w
Global B_Maus

B_listenAbschnitt = 0
B_Maus = 1

dim Liste.s_Liste(30)

NewList Film.s_Film()

LoadSprite(B_Listenabschnitt, "Bilder/Listenabschnitt.bmp")
LoadSprite(B_Maus, "Bilder/maus.bmp")

addElement(Film())
Film()\Name = Ich darf keine Namen nennen 1

addElement(Film())
Film()\Name = Ich darf keine Namen nennen 2

addElement(Film())
Film()\Name = Ich darf keine Namen nennen 3


repeat
ExamineMouse()

foreach Film()
for x = 1 to 30
 Liste(x)\x = 48
 Liste(x)\y =  x*20 ; Positionen der Listenabschnitte

StartDrawing(ScreenOutput())
Drawingmode(3)
DrawText(Liste(x)\x, Liste(x)\y, Film()\Name, 0)
StopDrawing()

 If SpriteCollision(B_Maus, MouseX(), MouseY(),  B_ListenAbschnitt,     Liste(x)\x, Liste(x)\y) and Mousebutton(1) ; wenn man einen Listenabschnitt Auswählt
  Liste(x)\Auswahl = 1 ; aktiviere ihn
 endif

 If Liste(x)\Auswahl = 1 ; ist er aktiviert
  ChangeCurrentElement(Film(), x) ; dann wechsle auf das Element das die Zahl des Abschnitts trägt die vorher gewählt wurde
 endif
  
; Ich möchte also in einer Liste von 3 Filmen z.B. den 2. Wählen. Die Zahl X ist also = 2. Nun möchte ich das ich das 2. Element auswähle. Doch wenn ich das durch die Oben gezeigten Zeilen mache, kommt die Fehlermeldung "Invail Memory Access"

FlipBuffers()
ClearScreen(RGB(200, 200, 200))
Until Beenden = 1
Erstmal ein Hinweis, ich weiß ich stelle viele dumme Fragen, aber bitte verzeiht es mir, ich muss das alles ja nunmal auch erst begreifen wie es funktioniert. Und das Fachchinesisch im Referenzhandbuch von PB kann ein normaler Anfänger ja ohne Hilfe nicht entziffern. [/code]

Verfasst: 30.03.2007 17:38
von edel
ChangeCurrentElement erwartet keine Nummer sondern ein Zeiger auf
ein Object. Benutze SelectElement.

Verfasst: 30.03.2007 17:43
von Kaeru Gaman
...und btw... beide next solltest du schon verwenden...
und die setup-schleife für die koordinaten in der hautpschleife zu haben halte ich auch nicht für sinnvoll...

Verfasst: 30.03.2007 20:42
von D4uS1
mit Selectelement() hängt sich das Programm auf sobald ich etwas ausgewählt habe.

Verfasst: 30.03.2007 20:46
von Kaeru Gaman
nuja... dann machst du vielleicht was falsch....?

anhand deines codes lässt sich das leider nicht nachvollziehen...

Verfasst: 30.03.2007 21:07
von D4uS1
Ich glaube zwar kaum daß sich jemand die Mühe macht das alles zu lesen, aber hier ist der Code:

Code: Alles auswählen

DELETED

Verfasst: 30.03.2007 21:10
von edel
St@ndFurz hat geschrieben:mit Selectelement() hängt sich das Programm auf sobald ich etwas ausgewählt habe.
Mit welchem Fehler ?

Verfasst: 30.03.2007 21:21
von D4uS1
PB hat keine Fehlermeldung angezeigt, das war ja das seltsame!

hab den Fehler gefunden, mehr oder weniger, ich hab einfach eine Variable genommen und hab x mit dieser gleichgesetzt, da das erste element in einer liste 0 ist noch -1 gerechnet und dann selectelement mit der variable eingesetzt, jetzt funktionierts, trotzdem danke an alle, ich bin immer wieder begeistert wie schnell hier die antworten kommen!!!!

PS: den quellcode nehm ich raus, der ist eh viel zu lang, sollte jemand trotzdem an ihm aus irgenteinem mir unbekannten grund interessiert sein kann er mir ja eine nachricht senden.