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

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

1

16.03.2008, 10:55

bad_alloc bei new, wo is der verdammte fehler??? [gelöst]

guten morgen!

ich hab mal wieder ein schönes speicherproblem. es geht um das neualloziieren von einem Array einer Struktur. alles bezieht sich auf eine datei des projekts.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct sTele
{
    unsigned short iMapID; //Zielkarte

    unsigned char  iTeleX; //ZielX

    unsigned char  iTeleY; //ZielY

    unsigned char    iKey; //Taste für Teleportbedingung

};

class CMapManager
{
private 
    //...

    sTele  *m_stTeleport;
public:
    //...

};


Dieses Array soll einen Teleportpunkt in der Map repräsentieren, pro Tile wird solch eine Struktur erzeugt.
selbst das laden geht wunderbar man beachte bitte die Speicheralloziierung:

C-/C++-Quelltext

1
2
3
//Ohne Probs in der LoadFromFile()-Fkt

m_stTeleport = new sTele[m_iMapSizeX*m_iMapSizeY];
fDatei.read(reinterpret_cast<char*>(m_stTeleport),m_iMapSizeX*m_iMapSizeY*sizeof(sTele));


Des weiterebn Gibt es eine Funktion um Ändern der Größe der Karte, void ReSize(int iNewSizeX,int iNewSizeY). und genau hier passiert das bad_alloc. man beachte bitte wieder die speicerhalloziierung und vergleiche mit der aus der LoadFromFile ;).

C-/C++-Quelltext

1
2
delete[] m_stTeleport;
m_stTeleport = new sTele[iNewSizeX*iNewSizeY]; //Hier keine Lust mehr


iNewSizeX / Y sind gültige Werte, z. b. 40 und 20 wären solch gültige, habs mit dem debugger geprüft.

und genau bei new wirft er eine exeption bad_alloc. woran kann das liegen, wenn es in der loadfromFile GENAU SO gemacht wird? irgendwie werd ich net schlau daraus.

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

16.03.2008, 11:41

also der fehler wurde behoben. woran es aber ganu lag liegt weiter im dunkeln. codingcat hat es ein wenig optimiert, wo ich ein wengi unelgent war und es klappt wunderbar warum auch immer.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

16.03.2008, 12:30

Wenn ich das richtig sehe enthält doch ein bad_alloc eine Nachricht. Schonmal diese ausgelesen?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

16.03.2008, 16:43

öhm so genau weis ich jetz nich ws du meinst.

meinst du jetz das, was im zusammenhang mit bad_alloc per msg-box kommt, oder nich was anderes?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

16.03.2008, 19:25

http://msdn2.microsoft.com/en-us/library/6512dwes(VS.80).aspx

Ist halt die Frage, ob er da nur den Standardkonstruktur nimmt oder eine Nachricht hinterlegt, die einem weiterhilft.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

6

16.03.2008, 22:47

std::exception abgeleitete Klasse (so auch std::bad_alloc) haben eine Memberfunktion what. Die hilft manchmal.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

17.03.2008, 12:04

ich habs nochma umgeschrieben, so wie ichs vorher hatte. komischerweise wurde diesmal kein bad_alloc geworfen. eventuell nur ein buildfehler (hatte aba eigl vorbildlicherweise das auch geprüft).

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

8

25.03.2008, 20:17

bad_alloc fliegt z.B. wenn kein weiterer Speicher mehr allokiert werden kann. Vielleicht hatteste ausversehen zu große Zahlen und deswegen zu viel speicher angefordert ...
Why is 6 afraid of 7?
Because 7 8 9

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

9

25.03.2008, 22:44

du hättest nach dem

C-/C++-Quelltext

1
delete[] m_stTeleport;
noch ein

C-/C++-Quelltext

1
m_stTeleport = NULL;
hinzufügen können. wäre zumindest sauber gewesen, da danach der pointer auch nicht mehr auf den speicherbereich gezeigt hätte. habe aber nicht das gefühl, dass dies viel zum beheben deines fehlers beigetragen hätte.

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

10

26.03.2008, 12:22

das haben wir natürlich auch probiert. ändert aba leider nix an der sache^^.

komischerweise ging auch das alte was ich hatte. eventuell war es nur ein buildfehler?

Werbeanzeige