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

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

26.04.2006, 09:12

Haltepunkt wegen beschädigung des "Heaps"

hallo leute..

gestern nocht hab ich mich am beispiel auf s.37 versucht.. und naja.. habs nicht fertig gemacht.

heute setz ich mich hin und wills erledigen... am anfang compiliere ich nochmal alles und schau was läuft.. und naja.. auf einmal kommt halt so:

Zitat


HEAP[S37.exe]: Heap block at 00E22888 modified at 00E228C4 past requested size of 34
Windows hat einen Haltepunkt in S37.exe ausgelöst.

Dies kann auf eine Beschädigung des Heaps zurückzuführen sein und weist auf ein Problem in S37.exe oder in einer der geladenen DLLs hin.

Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.
HEAP[S37.exe]: Invalid Address specified to RtlValidateHeap( 00E20000, 00E22890 )
Windows hat einen Haltepunkt in S37.exe ausgelöst.

Dies kann auf eine Beschädigung des Heaps zurückzuführen sein und weist auf ein Problem in S37.exe oder in einer der geladenen DLLs hin.

Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.
"S37.exe": "C:\WINDOWS\system32\SSSensor.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
S37.exe hat einen Haltepunkt ausgelöst.



wisst ihr was das soll?

hier noch der source code:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <windows.h>
#include <TriBase.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* pcCmdLine, int iShowCmd)
{
    //Initialisieren der Engine

    tbInit();

    //Logbucheintrag

    tbWriteToLog("Übung v. Buch S.37\n");
    tbWriteToLog("Ins Logbuch schreiben!");

    /*Speicher resevieren mit Zufallszahlen füllen, 
    und Inhalt der Beiden letzten Speicherbereiche vertauschen */

    int* pData1 = (int*)tbMemAlloc(6);
    tbWriteToLog("Speicher reserviert: ....... %d", tbMemGetSize(pData1));
    int* pData2 = (int*)tbMemAlloc(12);
    tbWriteToLog("Speicher reserviert: ....... %d", tbMemGetSize(pData2));
    if (!pData1) {}
    if (!pData2) {}

    //Größe abfragen

    int iSize = tbMemGetSize(pData1);
    tbWriteToLog("Größe von pData1 abgefragt: ....... %d",tbMemGetSize(pData1));
    
    //pData vergrößern

    pData1 = (int*)tbMemReAlloc(pData1, -6);
    tbWriteToLog("pData1 um 5 Bytes vergrößern: ....... %d", tbMemGetSize(pData1));
    if (!pData1) {}
    
    //Kontrollieren ob der Speicherbereich gültig ist

    tbWriteToLog("Kontrolle ob Speicherbereiche für pData1 und pData2 gültig sind");
    if(!tbMemIsValid(pData1)) {tbWriteToLog("Speicherbereiche ungültig");}
    tbWriteToLog("Speicherbereiche gültig");

    //SPEICHERBEREICH MIT ZUFALLSZAHLEN FÜLLEN

    tbWriteToLog("pData1 ##########################################");
    int i=0;
    for (i; i < 12; i++)
    {
        pData1[i] = tbIntRandom(0,100);
        tbWriteToLog("%d----%d",i,pData1[i]);
    }

    tbWriteToLog("pData2 ##########################################");
    i=0;
    for (i; i < 12; i++)
    {
        pData2[i] = tbIntRandom(0,100);
        tbWriteToLog("%d----%d",i,pData2[i]);
    }



    //Speicher von pData wieder freigeben

    TB_SAFE_MEMFREE(pData1);
    
    //Herunterfahren der Engine

    tbExit();
    return 0;
}


wenn ich tbExit() aufrufe, wird der haltepunkt hier gesetzt


ist tbExit() ausgeklammert.. tritt der gleiche fehler wieder auf ... jedoch bei makro TB_SAFE_MEMFREE


kann mir da vllt. wer helfen? :rolleyes: [/cpp][/code][/quote]
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

26.04.2006, 14:09

Du gehst davon aus, dass ein int nur 1 Byte braucht.
Ein int braucht jedoch 4 Bytes.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

3

29.04.2006, 09:46

oho... ich idiot :-D

danke :huhu:
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige