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

11

29.08.2010, 20:14

Die Express Edition auch? :o

Ist damit vielleicht folgendes gemeint: Finding Memory Leaks Using the CRT Library

Gruß
SaRu_

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

31.08.2010, 12:11

Beim Aufruf von CMesh::Create vergisst du die alten Resourcen freizugeben (z.B. Materialien vom vorhergehenden Mesh). Zur Verdeutlichung:

C-/C++-Quelltext

1
2
3
CMesh x;
x.Create("mesh1");
x.Create("mesh2"); // leak
@D13_Dreinig

xxendlessxx

Treue Seele

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

13

31.08.2010, 13:05

Da gibts so ne Paste damit schmierst du alles ein und schaust wo kleine Bläschen rausblubbern XD
*sorry für contraproduktiven beitrag*

14

31.08.2010, 17:01

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
const bool Mesh::create(std::string const& mesh) // Soll jemand was am return-Wert ändern können? Willst du was an mesh ändern? Wofür ne Kopie?
{
    LPD3DXBUFFER badjacency(NULL);
    LPD3DXBUFFER bmaterials(NULL);
    LPD3DXBUFFER beffectinstances(NULL);

    //string cmesh; Nutz du nirgendwo cmesh? Wenn ++i, aber hier wohl eher substr?
    //for(int i=0; i<mesh.length()-1; i++)
    //{
    //    cmesh+=mesh[i];
    //}

    HRESULT hr = D3DXLoadMeshFromX(mesh.c_str(), D3DXMESH_MANAGED, Direct3D->Device, &badjacency, &bmaterials, &beffectinstances, &NumMaterials, &Mesh);
    if (hr != D3D_OK)
    {
        Log->Write("Mesh", "Fehler beim Laden eines des Mesh, hr); // Fehlercode-Formatierung hat hier nix zu suchen?!
        return false;
    }
    D3DXMATERIAL* materials = reinterpret_cast<D3DXMATERIAL*>(bmaterials->GetBufferPointer()); // c++-style ;)
    Materials = new D3DMATERIAL9[NumMaterials];
    

    for (unsigned int i(0); i  < NumMaterials; ++i) // wenns wirklich ne Schleife sein muss ;) ++i u. unsigned 
    {
        Materials[i] = materials[i].MatD3D;
    }

    safe_release(badjacency); // is von dir übernommen. 
    safe_release(bmaterials);
    safe_release(beffectinstances);
    return true;
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
CMesh::CMesh() : Mesh(NULL), NumMaterials(0L), Position(D3DXVECTOR3(0.0f, 0.0f, 0.0f)), Rotation(D3DXVECTOR3(0.0f, 0.0f, 0.0f)), Scaling(D3DXVECTOR3(1.0f, 1.0f, 1.0f)), CRot(D3DXVECTOR3(0.0f, 0.0f, 0.0f))
{} // Initialisierungsliste

CMesh::~CMesh()
{
    safe_release(Mesh);
    safe_delete_array(Materials);
}


Schreib dir nen Template safe_delete_pointer, safe_delete_array, safe_release, dann passiert dir da nimmer viel ;)


Zitat

Materials ist z.B. ein Array, freigegeben wird aber nur das erste Element. delete statt delete[]
Tatsächlich? Dann hätte sich was am C++-Std. geändert seid ich weg war ;) Das löscht schlicht garnix weils nicht definiert ist!
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

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Deviloper« (31.08.2010, 17:10)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

31.08.2010, 18:36

Schreib dir nen Template safe_delete_pointer, safe_delete_array, safe_release, dann passiert dir da nimmer viel ;)

Besser wärs imo wenn er die create Methode loswerden und stattdessen den Konstruktor verwenden würde. Statt so safe_delete Kram würd ich wenn dann lieber gleich Smart Pointer verwenden.

16

31.08.2010, 20:30

Jap dito. Hab mich bei der create an seinen Klassenaufbau gehalten ;)
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

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

17

31.08.2010, 21:13

Wegen VS Memleakdetector: [Erledigt] Problem mit _CrtDumpMemoryLeaks
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.

Werbeanzeige