Invaild Memory Access

Anfängerfragen zum Programmieren mit PureBasic.
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Invaild Memory Access

Beitrag 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]
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

ChangeCurrentElement erwartet keine Nummer sondern ein Zeiger auf
ein Object. Benutze SelectElement.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Beitrag von D4uS1 »

mit Selectelement() hängt sich das Programm auf sobald ich etwas ausgewählt habe.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nuja... dann machst du vielleicht was falsch....?

anhand deines codes lässt sich das leider nicht nachvollziehen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Beitrag 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
Zuletzt geändert von D4uS1 am 30.03.2007 21:26, insgesamt 1-mal geändert.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

St@ndFurz hat geschrieben:mit Selectelement() hängt sich das Programm auf sobald ich etwas ausgewählt habe.
Mit welchem Fehler ?
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Beitrag 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.
Antworten