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.07.2007, 19:20

malloc führt zu Programmabsturz

Hallo

Ich schreibe nun schon seit 3 Wochen an einem kleinen Spielchen. Jetzt wo ich meine erste alpha geschafft habe will ich sie einem Freund zeigen. Mann erstelle also eine ReleaseVersion!

Er läd die Grafiken ganz normal. Doch dann stürzt das Programm bei einer ab. Wenn ich 10mal die selbe auf die selbe Art lade, stürzt das Programm bei der 7. ab!

Erstelle ich Debuginfos dazu und debugge es durch funktioniert es natürlich astrein! Starte ich die selbe Version normal -> Absturz!

Bei näherem suchen durch speichern auf die Festplatte von der Zeile die er schon geschafft hat hab ich herausgefunden dass er bei einem malloc:

C-/C++-Quelltext

1
2
MeineStruktur *pStruktur;
pStruktur = (MeineStruktur*)malloc(sizeof(MeineStruktur));


abstürzt! Reserviere ich vorher noch anderen Speicher, stürtzt er noch früher bei einem malloc ab.

Ich bin mir sicher es liegt am Kompiler. Doch was auch immer ich versucht / umgestellt habe, ändert nichts!

Vllt. könnt ihr mir da weiterhelfen?

mfg Markus

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

2

26.07.2007, 19:32

also, eigentlich ist der code sauber und lässt sich einwandfrei ausführen. evtl. kannst du den zeiger noch mit NULL initialisieren
"Don't trust your eyes: They are a hell of a lot smarter than you are"

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

26.07.2007, 20:44

Bei dem bisschen Code wird es nahezu unmöglich sein einen Fehler zu entdecken. Protokolier doch mal mit wo und wann du Speicher reservierst, ob der Speicher freigegeben wird usw...

Noch ein Tipp: Nutz lieber new statt malloc.

@ChrisJ: Is nich notwendig den Zeiger mit 0 zu initialisieren.
@D13_Dreinig

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

26.07.2007, 21:32

Kontrollier auch mal wieviel Speicher deine Anwendung braucht. Vielleicht ist es auch schlicht und ergreifend ein Memleak.
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.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

26.07.2007, 22:12

Zitat von »"Nox"«

Kontrollier auch mal wieviel Speicher deine Anwendung braucht. Vielleicht ist es auch schlicht und ergreifend ein Memleak.


Jo, wie gesagt! ;-P
@D13_Dreinig

6

27.07.2007, 12:46

10mb --> normal

inwiefern meinst du memleak? Du meinst ich schreibe über meinen reservierten Speichern hinaus?

Warum passiert der Fehler in der Debugversion nicht? bzw. in der Release nicht wenn ich sie debugge?

mfg Markus

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

7

27.07.2007, 12:53

wiki schreibt da folgendes:
[list]
Ein Speicherleck (englisch memory leak, gelegentlich auch Speicherloch oder kurz memleak) ist ein Ergebnis fehlerhafter Software. Ein solches Leck entsteht, wenn ein laufender Prozess einen Speicherbereich belegt, diesen jedoch im Zuge der Ausführung nicht mehr freigibt, durch einen Programmfehler aber selbst nicht mehr nutzen kann.
[/list]

8

27.07.2007, 13:11

keine Angst ich hab auch gegooglet, nur kann ich mir nicht vorstellen, dass nicht freigegebener Speicher einen solchen Fehler / Programmabsturz verursacht!

mfg Markus

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

9

27.07.2007, 13:18

vielleicht wird durch eine fehlerhafte schleife o.ä zuviel speicher reserviert..

10

27.07.2007, 13:22

na und?

selbst wenn ich

C-/C++-Quelltext

1
2
for (int i = 0; i < 1000; i++)
    malloc(1024)


sollte es keinen Absturz geben, oder?

mfg Markus

Werbeanzeige