Invaild Memory Access
Verfasst: 30.03.2007 17:33
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
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]
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