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

Jo

Frischling

  • »Jo« ist der Autor dieses Themas
  • Private Nachricht senden

1

12.06.2005, 20:41

Speicherlecks

Ich bekomme immer Speicherlecks

Allg def Variablen:

C-/C++-Quelltext

1
2
3
4
    LPD3DXMESH m_pModel;
    DWORD m_dwNumMaterials;
    LPDIRECT3DTEXTURE9* m_ppTextures;
    D3DMATERIAL9* m_pMaterials;


Funktion, die die Daten lädt:

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
    LPD3DXBUFFER pAdjacency;
    LPD3DXBUFFER pMaterials;
    LPD3DXBUFFER pEffectInstances;
    LPD3DXMATERIAL pMaterial;

    HRESULT hRes=::D3DXLoadMeshFromX(m_FileName, D3DXMESH_MANAGED, g_pD3DDevice, &pAdjacency, 
        &pMaterials, &pEffectInstances, &m_dwNumMaterials, &m_pModel);
    if(FAILED(hRes)) {return hRes;}
    
    if (m_dwNumMaterials==0) {return E_FAIL;}

    pMaterial=(LPD3DXMATERIAL) pMaterials->GetBufferPointer();

    m_ppTextures=new LPDIRECT3DTEXTURE9[m_dwNumMaterials];
    m_pMaterials=new D3DMATERIAL9[m_dwNumMaterials];

    for (unsigned int i=0; i<m_dwNumMaterials; i++)
    {
        rtString TexturePath("Data\\");
        TexturePath.Add(pMaterial[i].pTextureFilename);

        if (FAILED(::D3DXCreateTextureFromFile(g_pD3DDevice, TexturePath, &m_ppTextures[i])))
        {
            m_ppTextures[i]=NULL;
        }

        m_pMaterials[i]=pMaterial[i].MatD3D;
    }

    pAdjacency->Release();
    pMaterials->Release();
    pEffectInstances->Release();


Shutdownfunktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
for (unsigned int i=0; i<m_dwNumMaterials; i++)
    {
        m_ppTextures[i]->Release();
    }

    delete[] m_ppTextures;
    delete[] m_pMaterials;

    m_pModel->Release();
    delete m_pModel;


Ich bekomme immer den Fehler:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Direct3D9: (ERROR) :Memory still allocated!  Alloc count = 113
Direct3D9: (ERROR) :Current Process (pid) = 00000198
Direct3D9: (ERROR) :Memory Address: 00955024 lAllocID=1 dwSize=000047f8, ReturnAddr=00b3159b (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 0095a93c lAllocID=16 dwSize=0000057c, ReturnAddr=00b281d4 (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 0095aeec lAllocID=21 dwSize=000003d0, ReturnAddr=00b2989f (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 00959aec lAllocID=30 dwSize=000006bc, ReturnAddr=00b42fbb (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 0095a1dc lAllocID=33 dwSize=0000072c, ReturnAddr=00b34a89 (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 00e00064 lAllocID=36 dwSize=00003508, ReturnAddr=00b3159b (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 00e035a4 lAllocID=37 dwSize=00000198, ReturnAddr=00b3159b (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 00952f94 lAllocID=38 dwSize=00000030, ReturnAddr=00b3159b (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 00e03774 lAllocID=39 dwSize=00001020, ReturnAddr=00b3159b (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 00e047cc lAllocID=40 dwSize=00000820, ReturnAddr=00b3159b (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 00e05024 lAllocID=48 dwSize=00003000, ReturnAddr=00b37bf5 (pid=00000198)
Direct3D9: (ERROR) :Total Memory Unfreed From Current Process = 56892 bytes
Das Programm "[408] rt.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.


Weiß jemand, wo ich vergessen habe, Speicher freizugeben?

2

13.06.2005, 20:37

hi!

könnte evtl. an pMaterial liegen.

Zitat

delete m_pModel;

das kannst du dir schenken ;-)

mfg Keepcoding

Jo

Frischling

  • »Jo« ist der Autor dieses Themas
  • Private Nachricht senden

3

15.06.2005, 17:53

An pMaterial kann es eigenlich nicht liegen, da es eine Stuktur ist. Sie besteht nur aus Variablen, die der Compiler freigeben muss.

4

16.06.2005, 12:44

Zitat

Direct3D9: (ERROR) :Memory still allocated! Alloc count = 113
Direct3D9: (ERROR) :Current Process (pid) = 00000198
Direct3D9: (ERROR) :Memory Address: 00955024 lAllocID=1 dwSize=000047f8, ReturnAddr=00b3159b (pid=00000198)
Direct3D9: (ERROR) :Memory Address: 0095a93c lAllocID=16 dwSize=0000057c, ReturnAddr=00b281d4 (pid=00000198)

Wo kann man sich diese Informationen zu Speicherallokationen eigentlich ansehen?[/quote]
Mein Projekt: Rise of the Sylvan

Jo

Frischling

  • »Jo« ist der Autor dieses Themas
  • Private Nachricht senden

5

17.06.2005, 08:52

Die werden einfach nach dem Programmende in der Erstellen-Leiste angezeigt. (Zumindest bei VS .NET 2003)

Jo

Frischling

  • »Jo« ist der Autor dieses Themas
  • Private Nachricht senden

6

17.06.2005, 09:42

Hab mich verschriebe. Ich meinte natürlich in der Debug-Ausgabe.

7

17.06.2005, 10:50

Danke.
Was heißen denn diese Zeilen?
"C:\WINDOWS\system32\setupapi.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
Thread 0x744 wurde mit Code 0 (0x0) beendet.
Mein Projekt: Rise of the Sylvan

Jo

Frischling

  • »Jo« ist der Autor dieses Themas
  • Private Nachricht senden

8

27.06.2005, 22:58

Hab das Problem gefunden. Ich hab vergessen, die Shutdown()-Funktion aufzurufen.

Werbeanzeige