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

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

1

08.02.2006, 22:49

Visul C++ findet MemoryLeaks wo keine sind?

Ich bin derzeit dabei einen Programm mit Ogre zu schreiben, dabei trat folgednes Problem auf:
Ogre Forum Post

Wie dort bereits erklärt, treten Mem-Leaks auf, wenn ich Ogre in einer SDI-Applikation verwende.
Dies scheint jedoch nicht ein Problem speziell von Ogre zu sein sondern generell von Libs, die statische Variablen verwenden.

Hat jemand von euch schon mal mit so einem Problem zu tun gehabt?
Wie kann man das umgehen?

mfg Philipp

2

10.02.2006, 20:09

Siehe hier:

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
// MemoryLeakSimulator

// (c) Johannes Roth 2006

// Dieses kleine Programm verursacht ein MemoryLeak!


// Initialisierung

#include <iostream>
using namespace std;

// Prototypen

void MemoryLeak(int *pMemory, int i);
void AntiMemoryLeak(int *pMemory, int j);

int main () // Mainfunktion

{
    //Deklarationen

    int i = 0;
    int *pMemory = NULL; // MemoryLeakZeiger


    cout << "MemoryLeak startet!" << endl;
    for (i = 0; i < 100; i++)  // i gibt die Anzahl der MemoryLeaks (je 4mByte) an

    {
        MemoryLeak(pMemory, i); // Funktion für MemoryLeak i-mal aufrufen

    }
    
    return 0;
}

void MemoryLeak(int *pMemory, int i)
{
    // Deklaration lokaler Variablen

    int j = 0;

    // MemoryLeak verursachen

    cout << "\n\nEs wird Speicher reserviert!" << endl << "Vorgang Nr: " << i + 1 << "!" << "\n";

    for (j = 0; j < 1000001; j++)
    {
        pMemory = new int; // MemoryLeak durch Speicherreservierung ohne nachträglichem Deletevorgang!

        // Hier werden 1000000 Integer Bereiche reserviert, also 1000*4Byte = 4kByte*1000 = 4mByte

        
        if (j == 1000000) {
            // Ausgabe beim letzten Schritt das 4mByte reserviert wurden!

            cout << "Speicher von 4 mByte an Adresse " << pMemory << " reserviert!\a" << "\n\n";
        }

        /* Folgenden Code auskommentieren um MemoryLeak zu fixxen:
        AntiMemoryLeak(pMemory, j);*/
    }
    // MemoryLeak verursacht

}

void AntiMemoryLeak(int *pMemory, int j)
{
    // Start der Funktion

    delete pMemory; // Gibt den Speicher sofort wieder frei


    if (j == 1000000) {
        // Ausgabe beim letzten Schritt das 4mByte wieder freigegeben wurden!

        cout << "Der reservierte Speicher wurde wieder freigegeben!" << endl 
             << "Beweis: Gleiche Adressen im Speicher angesprochen!" << endl;
    }
}

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

10.02.2006, 20:25

Was will uns diese Werbung sagen Oo ?
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.

4

10.02.2006, 21:24

Wasn für ne Werbung o.O
Ich dachte er will erklärt haben wie man Memoryleaks verhindern kann. Daher dieses Programm, das ich jetzt extra dafür geschrieben habe, welches verdeutlicht wie Memoryleaks entstehen und verhindert werden können.

Zitat

Werbung im Allgemeinen dient der gezielten und bewussten Beeinflussung des Menschen. Der Werbende spricht Bedürfnisse teils durch emotionale, teils informierende Werbebotschaften zum Zweck der Handlungsmotivation an. Werbung appelliert, vergleicht, macht betroffen oder neugierig. - Wikipedia

Davon trifft wohl nichts zu. Desweiteren versteh ich deinen Spam nicht da keinerlei Antwortansätze vorhanden sind. Naja.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

10.02.2006, 21:44

Ich wollte nur wissen, was du uns damit sagen wolltest(war als Metapher gemeint).
Er weiß was memleaks sind und auch wie sie entstehen. Nur in diesem Falle gibt es nach seiner Aussage keinen Grund für diese Meldung, da um statische vars geht, also keine dynamisch allokierte Reservierungen.
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.

6

10.02.2006, 23:16

Naja dann ist seine Frage aber absolut unangebracht, da ihm im Forum schon gesagt wurde dass das einfach ein Bug seines Leak-Finders ist (wie bei fast allen). Ist ja auch logisch da die Stat-Var erst zum Schluss beim Programmende gelöscht werden.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

11.02.2006, 00:46

Stat Var sollten garnicht erst darin auftauchen da sie statisch und nicht dynamisch allokiert wurden. Auch wird normalerweise der Dump-Vorgang nach dem Beenden des Programmes durchgeführt, also wenn alle statischen Objekte längst wieder freigeben wurden. Alles in allem finde ich daher die Aussagen recht verwirrend.
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.

bassdscho

Alter Hase

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

8

11.02.2006, 01:40

*verwirrt*
also sind mem leaks die von stat vars gemacht wurden fürn arsch?
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

11.02.2006, 02:51

Eigentlicht dürfte es sowas garnicht geben, daher finde ich wie gesagt die Aussage ein wenig konfus.
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.

10

11.02.2006, 12:21

Zitat von »"Nox"«

Eigentlicht dürfte es sowas garnicht geben, daher finde ich wie gesagt die Aussage ein wenig konfus.


Wie schon gesagt erkennt der LeakFinder die auf Grund seines Arbeitsverfahrens.

Zitat

The problem with static members is that they don't get cleaned up until shutdown of the runtime library. This is probably happening after your leak detector tries to report what it thinks has been leaked. Most leak detectors have the same kind of problem with static data.

So, unless anyone else can see something I can't, ignore it. It's a limitation of your tool.

Werbeanzeige