Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

1

09.04.2005, 18:20

Pointer Problem

Folgendes:

Ich habe eine Botklasse und diese deklariert nun eine Kameraklasse. Während des Ausführens kommt es immer zu einer Accessviolation, und ich habe keine Ahnung woran das liegen könnte...

Der Fehler tritt immer dann auf, wenn ich der Kameraklasse eine Matrixadresse übergebe, und diese die als Pointer speichern soll.

So sieht der Code dazu aus:
Initialisierung der Kamera

C-/C++-Quelltext

1
2
3
if (BotCamera == NULL) BotCamera = new CBotCameraFly;
if (BotCamera == NULL) TB_ERROR_OUT_OF_MEMORY(TB_ERROR);
BotCamera->SetBotMatrix(&BotMatrix);


BotMatrix ist eine normale tbMatrix.
BotCamera ist in der Bot.h als CBotCameraFly* BotCamera deklariert.

Funktion SetBotMatrix:

C-/C++-Quelltext

1
virtual inline void SetBotMatrix(tbMatrix* Matrix) {MessageBox(...);}


Die Messagebox benutze ich natürlich nur zu testzwecken. das merkwürdige: die messagebox wird nicht mal ausgeführt, die accessviolation tritt genau in dem Moment auf, in dem ich die Funktion aufrufe... Leider hab ich im Mom nicht das DX SDK installiert, kann also nicht debuggen. jmd ne idee?

DrthM2001

Alter Hase

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

2

09.04.2005, 18:47

wie rufst du die funktion dann auf? Lass vielleicht mal das virtual inline weg, und schreib MessageBox richtig mit allen parametern aus ^^

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

3

09.04.2005, 18:52

-.- also mit der messagebox hat das ganze nichts zu tun, aber bitte^^

C-/C++-Quelltext

1
MessageBox(NULL, "asd", "asd", NULL);


Siehst doch oben wo die funktion aufgerufen wird:

C-/C++-Quelltext

1
BotCamera->SetBotMatrix(&BotMatrix);


und in genau dem moment kommt die accessviolation. ohne inline hab ichs auch schon versucht, bringt nix, das virtual muss bleiben, da die funktion geerbt wird von der Klasse IBotCamera...
Die dürfte aber nichts mit dem Prob zu tun haben.

4

09.04.2005, 19:26

C-/C++-Quelltext

1
MessageBox(NULL, "asd", "asd", NULL);

geht das überhaupt?
sollte das nicht zumindest

C-/C++-Quelltext

1
MessageBox(NULL, "asd", "asd", MB_OK);

heißen?

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

5

09.04.2005, 19:53

nene das passt..

6

11.04.2005, 17:54

[Kritik]
1) Der Titel "Pointer Problem" ist nicht besonders toll. Ich überlasse es dir das zu ändern. Las dir mal was einfallen, was dein Problem kurz und kanckig beschribt.
2) Falsche stelle. Das ist kein 2D/3D Grafikproblem.
[/Kritik]

Zitat

das virtual muss bleiben, da die funktion geerbt wird von der Klasse IBotCamera...
Die dürfte aber nichts mit dem Prob zu tun haben.

Das virtual muss nicht in der vererbeten Klasse stehen. Es muss nur dann da stehen, wenn man von der Vererbten Klasse noch einmal ableiten will und dann die Methode dort überschreiben will. Man macht sozusagen immer ein vermerck für die nächste Klasse. Genauer im Buch nachschlagen.


Deine Accessviolation kommt nicht weil dein OS grad Lust drauf hat. Du solltest einmal mit dem Debugger durch deinen Code steppen und dann schauen was genau passiert. Schau dir vor allem an wie die Adresse deiner Matrix ausschaut. Wenn die z.B. so ausschaut 0xcccccccc dann ist sie 100% ungültig.

Die Code-Schnippsel sind leider nicht sehr vielsagend. Wie wird denn deine Matrix-Klasse erzeugt? Ist es eine Member oder eine Locale Variable? Oder gar Global (hoffe für dich nicht ;D ) ?
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige