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

llennard

Frischling

  • »llennard« ist der Autor dieses Themas

Beiträge: 74

Wohnort: Kiel

  • Private Nachricht senden

1

21.04.2007, 16:01

Probleme mit Nullzeiger

Hallo, alle zusammen!

Mein Problem ist, dass der Wert einer meiner Zeiger (tbSpriteEngine* m_pSpriteEngine in der Klasse CGame) auf unerklärliche Weise auf null gesetzt wird.
Ich bin mir ziemlich sicher, das das nicht mit dem Quellcode zusammenhängt, da ich dort den Zeiger nicht verändere. Ich kann die SpriteEngine auch erst gut benutzen, aber dann stürzt das Programm ab.

Ich benutze Visual C++ 6.0.

Hat jemand ne Idee, woran das liegen könnte (irgendwelche Einstellungen im Compiler vielleicht)?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

21.04.2007, 16:02

Mist, hab keine Kristallkugel irgendwo verlegt. Kann dir nich helfen, sorry... Bin ja kein Hellseher!
@D13_Dreinig

Lord-archimedes

Treue Seele

Beiträge: 234

Wohnort: Hannover

  • Private Nachricht senden

3

21.04.2007, 16:39

Vielleicht ist es sinnvoll wenn du uns den fehlerhaften Quelltext mal schickst.
Höchstwahrscheinlich liegt irgendwo darin der Fehler
Gruß Lord-archimedes

llennard

Frischling

  • »llennard« ist der Autor dieses Themas

Beiträge: 74

Wohnort: Kiel

  • Private Nachricht senden

4

21.04.2007, 19:17

Herr David_pb, das tut mir ja schrecklich leid um deine Kristallkugel, aber ich verlange auch nicht dass du hellsiehst.
Das liegt nicht am Quellcode, hab jetzt nämlich ein Array in einer Klasse auskommentiert und jetzt geht es wieder alles.
Da soll mir mal jemand diese Logik erklären.

Und der Quellcode ist übrigens ziemlich lang, und ich hab auch keine Ahnung, welche Stelle ich davon posten sollte

Ich möchte nur ein paar Möglichkeiten wissen, wie der Compiler ohne mein Wissen meine Variablen verändern könnte, so generell gesehen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

21.04.2007, 19:19

Tut er ja auch nicht, es sei denn irgendwo im Code steht explizit dass er das tun soll. Ohne den entsprechenden Codeteil kann aber hier jeder nur mutmaßen.
@D13_Dreinig

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

6

21.04.2007, 20:40

nun ein Zeiger zeigt wie gesagt auf einen Speicherbereich. Du kannst ihm auf vrschiedene Arten Werte zuweisen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
//1. Anderer nicht genullter Zeiger

pZeiger=pZeiger2;
//2. Zweitens Speicher anlegen

pZeiger=new T[n];
//3. Array übergebn

pZeiger=aArray;
//4. einzelner Wert

*pZeiger=x;

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

21.04.2007, 20:59

Zitat von »"Firefly"«

nun ein Zeiger zeigt wie gesagt auf einen Speicherbereich. Du kannst ihm auf vrschiedene Arten Werte zuweisen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
//1. Anderer nicht genullter Zeiger

pZeiger=pZeiger2;
//2. Zweitens Speicher anlegen

pZeiger=new T[n];
//3. Array übergebn

pZeiger=aArray;
//4. einzelner Wert

*pZeiger=x;


Mal abgesehen davon dass das egtl nicht zum Thema passt, ist der Beitrag nichmal ganz korrekt.

C-/C++-Quelltext

1
*pZeiger=x;


Weist einem Zeiger garnichts zu, sondern dem Speicher auf den er zeigt.
@D13_Dreinig

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

8

22.04.2007, 09:24

Du hast absolut nichts an deinem Compiler falsch eingestellt. Der Compiler würde niemals von sich aus Zuweisungen in den Code einbauen. Vermutlich schreibst du irgendwo über die Grenzen eines Array hinaus, benutzt einen nicht mehr gültigen Zeiger oder irgend was anderes in die Richtung.

Bei wirklich misteriösen Dingen kann es aber auch manchmal helfen einfach das gesammte Projekt nochmal komplett neu übersetzen zu lassen ("Alles neu erstellen" heißt der Menüounkt glaube ich beim VC 6).

Zitat

Ich kann die SpriteEngine auch erst gut benutzen, aber dann stürzt das Programm ab.

Und das passiert sicher, weil dein Zeiger plötzlich 0 wird? Schonmal mit dem Debugger nachgeguckt, was so zu diesem Zeitpunkt passiert?
Why is 6 afraid of 7?
Because 7 8 9

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

22.04.2007, 10:18

Zitat von »"llennard"«


Das liegt nicht am Quellcode, hab jetzt nämlich ein Array in einer Klasse auskommentiert und jetzt geht es wieder alles.


das liegt sogar sicher am quellcode

Zitat von »"llennard"«


Und der Quellcode ist übrigens ziemlich lang, und ich hab auch keine Ahnung, welche Stelle ich davon posten sollte


poste die stelle wo es passiert und vor allem den code der davor ausgeführt wurde (wirf dazu mal einen blick auf den callstack. interessant natürlich vor allem jener code, der dinge mit besagtem array anstellt...)

Zitat von »"llennard"«


Ich möchte nur ein paar Möglichkeiten wissen, wie der Compiler ohne mein Wissen meine Variablen verändern könnte, so generell gesehen.

generell tut er das nicht und im speziellen auch nicht ;)

Werbeanzeige