JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=2e1d95b46fa9ab47cf4180c8634de351Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Programm stürzt ab
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 17:33    Titel: Programm stürzt ab Antworten mit Zitat

Menschenskind!

Ich progg gerade wieder an meinem alten Game.

Aber jetzt komm ich nichtmehr weiter.

Also:

Ich habe eine Funktion:
Code:
void offset(CBunker &obj, bool b);

Diese Funktion sollte eigentlich eine Klasse offseten, wie man am Namen erkennen kann.
Normal wird sie immer so aufgerufen:
Code:
offset(BO[0], true);



Das ging bis jetzt auch immer blendend.


Jetzt der Haken an der Sache:
Wenn ich die Funktion so aufrufe:
Code:
offset(BO[1], true);

Kackt das Programm ab, sobald sie aufgerufen wird.


ABBEER:
Die ersten Zeilen der Funktion sehen wie folgt aus:
Code:
obj.SR.left = 0;
   obj.SR.right = 12;
   obj.SR.top = 1;
         obj.SR.bottom = 13;


WENN ich aber jetzt die letzten 2 auskommentiere:
Code:
obj.SR.left = 0;
   obj.SR.right = 12;
//   obj.SR.top = 1;
//       obj.SR.bottom = 13;


Wenn ich diese 2 Linien auskommentiere Funzt auch der ganze Rest, indem noch einige mal einer top und bottom Variable eines Rects ein Wert zugewiesen wird.
Ich verstehe das nicht.
Sowas nenne ich unlogisch hoch 10.

Aber wie gesagt, wenn ich das ganze mit
Code:
offset(BO[0], true);

aufrue klappt alles.
K, wenn die ganze Funktion dann nicht gehen würde wäre es eine Sache.
Aber wenn ich diese blöden 2 Linien auskommentiere Funzt alles.

Jemand ne Ahnung?! An solchen blöden Sachen, verliere ich immer die Lust Crying or Very sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.10.2004, 18:13    Titel: Antworten mit Zitat

Was ist offset(...) ?
und was ist BO[...] ?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 18:29    Titel: Antworten mit Zitat

äh, allerhöchstens Arrayüberschreitungen, aber das wäre wohl zu simpel.Ganz vieleicht liegt es an der Quellcode optimierung bei mir funktioniert manchmal die Debug aber nicht die Release oder so und ich hab keine Ahnung woran das liegt.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 18:35    Titel: Antworten mit Zitat

Bei der Debug werden um Arrays (soweit ich weis) noch "Sicherheitsbytes" außenrum angelegt, so dass, wenn du über arraygrenzen hinausschreibst, nicht in benutzten speicher geschrieben wird.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 18:57    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
Was ist offset(...) ?
und was ist BO[...] ?




offset setet die Variablen einer Klasse off^^
Also, sie initialisiert sie mit verschiedenen Werten.
BO[] ist, wie du aus dem Code entnehmen kannst eine Instanz der Klasse CBunker.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.10.2004, 19:04    Titel: Antworten mit Zitat

Ist offset ne selbstgemachte Funktion von dir ?
Kannste mal die definition und deklaration von BO zeigen ?
Kannste mal den Code der Funktion offset zeigen ?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 19:49    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
Ist offset ne selbstgemachte Funktion von dir ?
Kannste mal die definition und deklaration von BO zeigen ?
Kannste mal den Code der Funktion offset zeigen ?


Jo, alles selbstgemacht.
So wird BO dekleriert:
Code:
CBunker BO[1];



Hier offset:
Code:
bool offset(CBunker &obj, bool b)
{
   obj.SR.left = 0;
   obj.SR.right = 12;
   obj.SR.top = 1;
   obj.SR.bottom = 13;

   obj.SRB.left = 0;
   obj.SRB.right = 35;
   obj.SRB.top = 30;
   obj.SRB.bottom = 45;

   obj.EXPLOD.left = 40;
   obj.EXPLOD.right = 54;
   obj.EXPLOD.top = 0;
   obj.>EXPLOD.bottom = 12;

   int r = rand()%800;

   if(b == true)
   {
      //P.p.x = r+12;
      //P.p.y = LS.LS[r]-15;

      obj.DEB.left = r;
      obj.DEB.right = r+35;
      obj.DEB.top = Landsc[r]-15;
      obj.DEB.bottom = Landsc[r];
   }


   obj.DE.left = 100;
   obj.DE.right = 113;
   obj.DE.top = 167;
   obj.DE.bottom = 179;

   //P.l = 20;

   //obj.velocity = 20;
   //obj.angle = 45;
   //obj.rebound = 20; Bezieht sich auf ältere Versionen, als es noch einen Rebound gab(Hopsball-mäßiger Aufprall...)

   obj.bx = 100;
   obj.by = 167;

   obj.time = 0;
   obj.explodetime = 0;

   obj.end = true;

   obj.EXPLODING = false;

   return true;
}



Hier die Definiton der Klasse:

Code:
class CObject //Hauptklasse für Objekte
{
public:
   RECT DE;  //Ziel-Rechteck für Render-vorgang
   RECT SR; //Source-Rechteck auf der Surface für das Objekt
   RECT DEB;
   RECT SRB;
   RECT EXPLOD; //Source-Rechteck auf der Surface für die Explosion
   bool end; //Entscheidet ob das OBjekt noch berechnet wird
   bool EXPLODING; //Ist bei einer Explosion true
   float explodetime;
   float explodbegin;
   LPDIRECTDRAWSURFACE7 *Surface; //Die Source-Surface die die Sprites enthält
   float time; //Zeit wie lang das Objekt besteht

   bool Draw(LPDIRECTDRAWSURFACE7 &Destination);
   bool Calculate(void);
private:
protected:
};

//Kinderklassen - Sie enthalten Objekt-spezifische Elemente


class CBunker : public CObject //Klasse für die Bunker, abgeleitet von CObject
{
public:
   Point P1; //Erste koordinate des Kanonen-Rohres
   Point P2; //Zweite koordinate des Kanonen-Rohres
   int angle; //Speichert den Winkel des Kanonen-Rohres
   int velocity; //Geschwindigkeit mit dem das Geschoß abgeschoßen werden soll
   int lifepoints; //Energie des Bunkers
   int bx;
   int by;

   bool DrawPipe(void);
private:
protected:
};


Also CBunker wird von CObject abgeleitet.
Am Anfang wird global 2 Typen(BO[0] und BO[1]) der Klasse CBunker dekleriert(oder definiert?!).

Das komische ist ja, dass es mit BO[0] EINWANDFREI läuft, mit BO[1] stürzt es aber nach dem Aufruf der Funktion ab.
Und noch komischer ist, dass es mit BO[1] geht, wenn ich die 3. und 4. Zeile innerhalb der Funktion Offset auskommentiere!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 19:58    Titel: Antworten mit Zitat

äh, nur mal so nebenbei, "offset" bedeutet etwa soviel wie "Abstand". Fürs setzen von Variablen benutzt man den Konstruktor oder eine init()-Methode. Wenn mans unkonventionell mag, kann man die Methode auch "setVariables()" nennen. offset ist da ziemlich ungeeignet...

soviel zum Thema "Programmierstil"

greetz
Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.10.2004, 20:02    Titel: Antworten mit Zitat

Böser Programmierfehler:

CBunker BO[1] stellt nur ein Arrayfeld zur Verfügung das heisst es kann kein B[1] angesprochen werden da ja BO[0] das einzige zur Verfügung stehende Feld ist.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 20:03    Titel: Antworten mit Zitat

HotAcid hat Folgendes geschrieben:
äh, nur mal so nebenbei, "offset" bedeutet etwa soviel wie "Abstand". Fürs setzen von Variablen benutzt man den Konstruktor oder eine init()-Methode. Wenn mans unkonventionell mag, kann man die Methode auch "setVariables()" nennen. offset ist da ziemlich ungeeignet...

soviel zum Thema "Programmierstil"

greetz
Felix



grml wusste das sowas kommt Cool

Entschuldigung, aber als ich das Klassentemplate geschrieben habe, war ich 10 Razz
Ich kann von Glück reden dass ich Off mit 2 f geschrieben habe.

Und nachdem ich den Thread eröffnet habe, habe ich das als Funktion in die Klasse gepackt.
Ist eben nen kleines DX-game, dass ich als ich mir JLI1 gekauft habe, angefangen habe, und halbfertig rumgammeln hab lassen.
Ich bin grad dabei den Code zu restaurieren Wink
Außerdem find ich die Kommentare die ich damals setzte süß Laughing

Im letzten Post musste ich das ganze sogar noch schnell umsetzen, weil ich es ja schon in der Klasse hatte, aber ich hier nicht 2 mal nen anderen Code präsentieren wollte.


P.S.: Aber in der Klasse gepackt, kommen genau die gleichen Sachen wie so.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 20:06    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
Böser Programmierfehler:

CBunker BO[1] stellt nur ein Arrayfeld zur Verfügung das heisst es kann kein B[1] angesprochen werden da ja BO[0] das einzige zur Verfügung stehende Feld ist.



Check ich nicht ganz Confused


Ich habe immer gelernt das wenn ich z.B. "int array[1]" mache, mir array[0] und array[1] zur Verfügung stehen.
So hat das auch immer geklappt.

Kannst mir das genauer erklären??

Aso: Und wie soll ich das jetzt beheben?! "CBunker BO[2]" oder wie?!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.10.2004, 20:11    Titel: Antworten mit Zitat

Von wem auch immer du das gelernt hast erschlag ihn ^^

Du gibst bei Objekt foo[anzahl] an das ein Feld vom Typ Objekt mit anzahl elementen erzeugt wird. Wenn du dann darauf zugreifen willst über foo[index] kann index dann im Bereich von 0 bis anzahl-1 sein.

mit CBunker BO[2] solltest du dein Problem lösen können
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 20:11    Titel: Antworten mit Zitat

Wenn du ein Array deklarierst, dann musst du in den eckigen Klammern angeben, wie viele Elemente es haben soll.
Das der Index beim Zugriff bei 0 begint liegt dadran, dass ein array wie ein pointer funktioniert. BO ist sozusagen der Zeiger auf das erste Element => (BO+0) oder BO[0]. (BO+1) oder BO[1] somit auf das zweite usw.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.10.2004, 20:12    Titel: Antworten mit Zitat

lol, ich sehe wir ergänzen uns perfekt Smile
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 17.10.2004, 20:13    Titel: Antworten mit Zitat

Hehe, perfekte abgepasst ^^
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum