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

baba_melone

Frischling

  • »baba_melone« ist der Autor dieses Themas

Beiträge: 62

Wohnort: 66879 Obermohr

Beruf: Schüler

  • Private Nachricht senden

1

14.08.2006, 19:53

_BLOCK_TYPE_IS_VALID beim löschen eines Strings

Hi
bei meinem aktuellen Spiel hab ich ein prob mit dem oben genannten assert, der, wie gesagt beim Löschen eines Strings auftaucht.

Quellcode

1
2
3
char * pcText = "ziemlich langer Text"
                        "ziemlich langer Text";
delete pcText;

ich habe das dumme Gefühl, dass ich pcText einen zu langen Text zugewiesen habe, der quasi eine Art Maximallänge überschritten hat und dessen Speicher eben nicht "VALID" ist. Darauf bin ich während dem Debuggen gekommen, weil pcText vor dem Löschen nicht den gesamten langen Text als Wert hat. Als Hinweis: ich habe den speicher vorher nicht schonmal gelöscht und der Zeiger zeigt auf eine "VALIDE" Adresse[/code]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

14.08.2006, 19:57

Du darfst diesen String nicht löschen, da du den Speicher nicht mit new angefordert hast. Wenn du einen String so initialisierst, sorgt der Compiler für Reservieren und Freigeben des Speichers.

baba_melone

Frischling

  • »baba_melone« ist der Autor dieses Themas

Beiträge: 62

Wohnort: 66879 Obermohr

Beruf: Schüler

  • Private Nachricht senden

3

14.08.2006, 20:02

Danke für die schnelle Antwort! Aber warum fehlt ein Großteil des zugewiesenen Textes?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

14.08.2006, 20:16

Zeig mal deinen Code ...

baba_melone

Frischling

  • »baba_melone« ist der Autor dieses Themas

Beiträge: 62

Wohnort: 66879 Obermohr

Beruf: Schüler

  • Private Nachricht senden

5

14.08.2006, 20:38

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
char * pcEffect =
        "TECHNIQUE T1\n"
        "{\n\t"
        "PASS P1\n\t"
        "{\n\t\t"
        "Texture[0] = <Texture1>;\n\t\t"
        "ZEnable = true;\n\t\t"
        "ZWriteEnable = true;\n\t\t"
        "ColorOp[0] = Modulate;\n\t\t"
        "ColorArg1[0] = Texture;\n\t\t"
        "ColorArg2[0] = Current;\n\t\t"
        "AlphaBlendEnable = true;\n\t\t"
        "Lichting = true;\n\t\t"
        "Cullmode = CCW;\n\t\t"
        "ColorVertex = false;\n\t\t"
        "SpecularEnable = true;\n\t\t"
        "MaterialDiffuse = {1.000f, 1.000f, 1.000f, 1.000f};\n\t\t"
        "MaterialAmbient = {0.010f, 0.005f, 0.000f, 1.000f};\n\t\t"
        "MaterialEmissive = {0.000f, 0.000f, 0.000f, 0.000f};\n\t\t"
        "MaterialSpecular = {0.000f, 0.000f, 0.000f, 0.000f};\n\t\t"
        "MaterialPower = 1.0f;\n"
        "\t}\n"
        "}\n";
//...irrelevante andere Sachen

sprintf(aacEffects[i], "DWORD NumTextures = 1;\nSTRING Texture1Filename = %s;\nDWORD Texture1Type = 1;\nTEXTURE Texture1;\n%s", pcIniValue, pcEffect);


[Edit by Osram: Der code Tag heisst nicht code, sondern cpp ;) ]

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

6

14.08.2006, 20:59

Wie ist denn aacEffects deklariert? Insbesondere, hat es genug Platz?
"Games are algorithmic entertainment."

baba_melone

Frischling

  • »baba_melone« ist der Autor dieses Themas

Beiträge: 62

Wohnort: 66879 Obermohr

Beruf: Schüler

  • Private Nachricht senden

7

15.08.2006, 23:44

aacEffects war, wie der Name sagt, mal ein 2dimensionaler Array, den ich später wegen der dynamischen Speicherverwaltung zu einem Zeiger auf einen Zeiger gemacht habe(ist ja im Prinzip dasselbe). aacEffects hat Platz für die Länge von pcEffect + 200, also genug.Außerdem dürfte das mit dem Prob recht wenig zu tun haben (es ist ja jetzt auch kein Prob mehr, es würde mich nur interessieren, warum der Debugger nicht den vollständigen Text von pcEffects anzeigt. Im moment kann ich noch nicht überprüfen, da ein anderes Prob aufgetaucht ist, dem ich aber noch nicht nachgegangen bin und das hiermit auch recht wenig zutun hat, ob pcEffects tatsächlich auf den unvollständigen Text zeigt(was ich mir schlecht vorstellen kann), oder ob der Debugger schlichtweg einfach nicht alles anzeigt.

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

8

16.08.2006, 10:11

Ah, das kann sein, dass der Debugger Stringausgaben begrenzt. Mach halt mal eine MessageBox zum Debuggen hin.
"Games are algorithmic entertainment."

baba_melone

Frischling

  • »baba_melone« ist der Autor dieses Themas

Beiträge: 62

Wohnort: 66879 Obermohr

Beruf: Schüler

  • Private Nachricht senden

9

16.08.2006, 11:00

Gute Idee, ne Messagebox wär vllt. etwas unübersichtlich, aber ich hab den String mal in die Logbuchdatei geschrieben, und er war vollständig. is ja auch n ding, dass der Debugger Strings nicht vollständig anzeigt. Das kann ziemlich verwirren.

Werbeanzeige