Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2003, 12:41 Titel: Programm stürzt beim Aufruf new ab... |
|
|
Hi!
Ich wollte mal Waffen in meinem Spiel einbauen. Dazu hab ich in der Playerklasse eine Funktion AddWeapon geschrieben, in der folgendes steht.
Code: |
Weapon *pWeapons = new Weapon;
pWeapons->Create();
pWeapons->SetWeaponData(data);
pWeapons->SetOffset(10,-10);
pWeapons->AddAnimation(Animation_name,ImageFilename,image_type,count,FrameTime,special);
WeaponTyp.push_back(*pWeapons);
|
Weapon ist eine Klasse, selbst wenn ich alles auskommentiere und nur noch Code: | Weapon *pWeapons = new Weapon; | stehen habe, stürzt das Programm ab. (auch wenn ich gleich danach ein delete pWeapons; Befehl setze.
wenn ich aber in der Playerklasse unter private: ein Weapon Weapon1; deklariere und danach die AddWeapon Funktion so umschreibe:
Code: |
Weapon *pWeapons = &Weapon1;
pWeapons->Create();
pWeapons->SetWeaponData(data);
pWeapons->SetOffset(10,-10);
pWeapons->AddAnimation(Animation_name,ImageFilename,image_type,count,FrameTime,special);
WeaponTyp.push_back(*pWeapons);
|
also den Zeiger jetzt nur noch auf Weapon1 setzen und nicht extra einen neuen Speicher reserviere, funktioniert alles wunderbar. Woran kann das liegen? Genug Speicher schein ich ja zu haben. Wenn ich den Taskmanager aufrufe hab ich noch ~450MB frei. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 17.08.2003, 12:56 Titel: |
|
|
Poste mal den Code vom Konstruktor... _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2003, 13:15 Titel: |
|
|
Da werden nur paar Variablen mit Werten ausgestattet...
Code: |
Weapon_inited = false;
// Kollision
Weapon_Radius_X = 0;
Weapon_Radius_Y = 0;
|
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 17.08.2003, 13:29 Titel: |
|
|
Code: |
WeaponTyp.push_back(*pWeapons);
|
Diese Zeile leuchtet mir nicht ganz ein. Du erstellst ein Weapon-Objekt auf dem Heap und danach erstellst du eine Kopie davon, ohne es hinterher zu löschen. Nagut... hast du denn auch einen Kopierkonstruktor und den =-Operator überladen? Das sind Voraussetzungen für STL-Kompatible Objekte. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2003, 14:09 Titel: |
|
|
Ich habe doch oben in meinem ersten Beitrag geschrieben, selbst wenn ich alles auskommentiere, also wenn nur noch
Code: | Weapon *pWeapons = new Weapon; |
da steht, stürzt das Programm gleich ab. Das ist ja das, was mich wundert...Deshalb hat das ja in erster Linie nicht viel zu sagen...
Wenn ich die Anweisung("Weapon *pWeapons = new Weapon;") aber in der main.cpp ausführe funktioniert es, aber wenn ich in der PlayerKlasse in der Funktion AddWeapon das so schreibe nicht.
Code: |
void Player::AddWeapon(void)
{
Weapon *pWeapons = new Weapon;
} |
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 17.08.2003, 14:14 Titel: |
|
|
Vielleicht liegt es ja daran, wie du mit den Container umgehst.. kommentier auch mal alle Zeilen aus, in denen du auf den Container zugreifst. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2003, 14:54 Titel: |
|
|
Hallo Hazel?
Das hier klappt ja:
Code: |
Weapon *pWeapons = &Weapon1;
pWeapons->Create();
pWeapons->SetWeaponData(data);
pWeapons->SetOffset(10,-10);
pWeapons->AddAnimation(Animation_name,ImageFilename,image_type,count,FrameTime,special);
WeaponTyp.push_back(*pWeapons);
|
deshalb kann es ja nicht am COntainer liegen, oder? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 17.08.2003, 15:09 Titel: |
|
|
Es liegt natürlich nicht am Container sondern an dir. Bei deiner zweiten "Lösung" erstellst du eine Kopie von Weapon1, und zwar in dieser Zeile(zum Zweiten...):
Code: |
WeaponTyp.push_back(*pWeapons);
|
Vielleicht solltest du Zeiger auf die Weapons speichern anstatt Weapons, dann hast du den ganzen Kopierärger nicht.
Ich wüsste nicht woran es sonst liegen könnte, tut mir leid. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 17.08.2003, 15:56 Titel: |
|
|
hm, ziemlich komischer fehler.
Hatte ich auch mal so in der Art.
Prüf mal den this Pointer und ähnliches.
Bei meinem Projekt habe ich den Fehler nie gefunden.
Aber ich denke dass er mit den char-pointer zu tun hatte.
Damals hatte ich nämlich noch nicht std::string benutzt. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2003, 20:21 Titel: |
|
|
Vielen vielen Dank Hazel!!!
Hat geklappt mit dem vector<..> zeug. Weiß zwar nicht genau warum, weil ich ja auch mal nur die zeile blabla var = new blabla; geschrieben hatte. Aber Hauptsache es funktioniert jetzt! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 17.08.2003, 20:49 Titel: |
|
|
Jo kein Problem... würd mich aber trotzdem brennend interessieren woran's lag. ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 18.08.2003, 07:55 Titel: |
|
|
naja ich hab ja jetzt nur statt
Code: | vector<Weapon> WeaponTyp; |
das hier geschrieben
Code: | vector<Weapon*> WeaponTyp; |
und dann statt Code: | WeaponTyp.push_back(*pWeapons); | das
Code: | WeaponTyp.push_back(pWeapons); |
Mich wundert es nur, dass das geklappt hat, weil ich das ja auch mal ganz ohne diesen vector ausgeführt habe... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 18.08.2003, 08:09 Titel: |
|
|
Hmm ich hatte auch schon ein paar komische Fehler mit der STL die bei VC++ dabei war. Mit dem STLPort hab ich allerdings keine Probleme. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
|