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

1

26.04.2008, 15:29

Kleines Problem beim ersten kleinen Projekt

Wie man ja dem Titel entnehmen kann hab ich ein kleines Problem:
Ich hab mit meinem eigenem kleinem Spielchen angefangen...Hauptmenü :)

Nach den ersten paar Fehler ließ es sich dann auch schon problemlos kompilieren, nur beim Start kommt Folgendes (Debug):

Unbehandelte Ausnahme bei 0x00414fd6 in ... : 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.


Wenn ich dann in den Quelltext schau (VC++ 2005 Express E), seh ich links ein kleiner gelber Pfeil. Wenn ich darüberfahr, steht "Dies ist die nächste Anweisung, die ausgeführt wird. ..."
In der Zeile steht folgendes:

C-/C++-Quelltext

1
m_pStateBlock->Apply(); // Direct3D-Status zurücksetzen. "m_pStateBlock" ist vom Typ "PDIRECT3DSTATEBLOCK9"



Weiß jemand weiter?
Den ganzen Code zu posten halte ich für sinnlos...
Falls ihn trotzdem jemand will, einfach sagen.

Schonmal thx!

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

2

26.04.2008, 15:42

0xC0000005 steht für NULL-Pointer.

Was passiert genau beim Aufruf von m_pStateBlock->Apply() ??

Geh mal mit dem Debugger durch (Taste F10/F11; evtl. mit Breakpoints arbeiten).
Fahr mit der Maus beim Debuggen über die einzelnen Variablennamen :arrow: der Wert der Variable wird angezeigt.

Hoffe dies hilft weiter ;)

3

26.04.2008, 16:09

Danke!
Glaub ich weiss wo der Fehler ist:

Wenn ich das mit F10 durchgeh, dann sah ich vorher (jetzt irgendwie nichtmehr), dass tbInit() 1 zurückliefert.

1 ist doch "true", also ist folgende Bedingung wahr und es sollte ein Fehler geben.

if(tbInit()) return TB_ERROR;

Gibts also vielleicht einen Fehler beim Initialisieren der TriBase-Engine?

Das würde vielleicht auch Fehler beim Debugging bei allem was mit der "Variablen" "D3D" zu tun hat (tbDirect3D& D3D = tbDirect3D::Instance(); ) erklären!?
Größere Fehler von meiner Seite sind denke ich eher unwahrscheinlich, da dieser Teil noch sehr dem von den Beispielspielen (lol, cooles Wort) gleicht.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

26.04.2008, 16:22

Das kann gut sein. Dann musst du aber die Einstellungen überprüfen.

Zitat

Beispielspielen (lol, cooles Wort)

:lol:

5

26.04.2008, 16:22

Hi.
Ich habe zwar auch nicht so viel Ahnung (stecke auch noch im ersten Projekt... ;) )
aber vielleicht solltest du mal die Logbuchdatei checken...
(Log.html)

mfg MMAnfänger

6

26.04.2008, 23:18

ok, werd sie mir morgen mal anschaun

7

27.04.2008, 08:04

Log.html spuckt aus, dass die tb-Engine richtig initialisiert wurde, jedoch gibts ne warnung, die ich nicht richtig versteh (tbExit wurde nicht aufgerufen! Wird automatisch erledigt...):



INFO: TriBase-Engine wird initialisiert... (tribase.cpp, Zeile 86, Funktion tbInit)

INFO: Initialisierung komplett! (tribase.cpp, Zeile 104, Funktion tbInit)

INFO: Der Konfigurationsdialog wird aufgerufen... (tbconfig.cpp, Zeile 1050, Funktion tbDoConfigDialog)

WARNUNG: tbExit wurde nicht aufgerufen! Wird automatisch erledigt... (tribase.cpp, Zeile 48, Funktion DllMain)

INFO: TriBase-Engine wird heruntergefahren... (tribase.cpp, Zeile 113, Funktion tbExit)

INFO: Alle Speicherbereiche freigegeben! (tbmemory.cpp, Zeile 116, Funktion tbMemExit)

INFO: Herunterfahren abgeschlossen! (tribase.cpp, Zeile 149, Funktion tbExit)

edit: hab gerade rausgefunden, dass alles ab der warnung (also die warnung auch) erst auftritt, sobald ich bei dem "festgestellten problem" auf "nicht senden" drücke. liegt wohl daran dass das dann nicht richtig beendet wird, also wirds selbst gemacht...

8

27.04.2008, 10:25

Hi.

Hast du vor dem Hauptmenü auch ein Intro?

Auf jeden Fall würde ich in dem Bereich, wo du denkst, dass der Fehler auftritt in kleineren Schritten Informationen ins Logbuch schreiben:

C-/C++-Quelltext

1
2
3
4
5
6
7
//Beispiel:

TB_INFO("Es wird versucht, die Tribase Engine zu initialisieren!", TB_INFO);
//Tribase initialisieren...

TB_INFO("Intro wird initialisiert!", TB_INFO);
//Intro....

TB_INFO("Hauptmenü wird gestartet!", TB_INFO);
//etc...


wenn jetzt der letzte Eintrag vorm Absturz z.B. Hauptmenü wird gestartet ist, kann man so gut wie sagen, dass da der Fehler liegt.


mfg MMAnfänger

9

27.04.2008, 10:49

Hmmm, wenn man es sich so recht anschaut, sieht es aus, als würde beim Konfigurationsdialog ein Fehler auftreten.
Oder hast du danach einfach keine "TB_INFOS" mehr gesetzt?

Normalerweise geht es ungefähr so weiter:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/\___  ___\      /\_\  /\  __\
\/__/\ \__/ _  __\/_/_ \ \ \_\\   ____    _____      __
    \ \ \  /\`´__\ /\ \ \ \  __\ /\ __\_ /\  __\   /´__`\
     \ \ \ \ \ \/  \ \ \ \ \ \_\\\ \\_\ \\ \____\ /\  __/
      \ \_\ \ \_\   \ \_\ \ \____\\ \___\ \ \____\\ \____\
       \/_/  \/_/    \/_/  \/____/ \/__/   \/____/ \/____/

INFO: TriBase-Engine wird initialisiert...  (tribase.cpp, Zeile 86, Funktion tbInit)
INFO: Initialisierung komplett! (tribase.cpp, Zeile 104, Funktion tbInit)
INFO: Der Konfigurationsdialog wird aufgerufen...   (tbconfig.cpp, Zeile 1050, Funktion tbDoConfigDialog)
INFO: Die Direct3D-Komponente wird initialisiert... (tbdirect3d.cpp, Zeile 162, Funktion tbDirect3D::Init)
INFO: Erstellen des Fensters... (tbdirect3d.cpp, Zeile 169, Funktion tbDirect3D::Init)
INFO: Initialisierung von Direct3D...   (tbdirect3d.cpp, Zeile 209, Funktion tbDirect3D::Init)
INFO: Die Initialisierung der Direct3D-Komponente ist abgeschlossen!    (tbdirect3d.cpp, Zeile 274, Funktion tbDirect3D::Init)


mfg MMAnfänger

10

27.04.2008, 14:07

ok, habs gemacht

es war also doch ein fehler von mir, das funktioniert jetzt.
nur geht das schreiben noch nicht. kommt auch so ein fehler. allerdings nur mit schriftart2, nicht mit der 1.

das problem müsste ja dann noch lösbar für mich sein :)

danke an alle!

edit:
das problem hab ich jetzt auch beseitigt.
jetzt funktioniert alles :)

Werbeanzeige