Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » delete[] funktioniert nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
28.02.2005, 14:06 Uhr
Tommix



Hallo,
also bei mir geht dies hier:

C++:
int main()
{
    char* Buffy;

    for (int i = 0; i < 100; ++i)
    {
        Buffy = new char[32800000];
        delete[] Buffy;
    }

    return 0;
}


Da Du aber selbst schreibst:

Zitat:

Wie gesagt habe ich in einem kleinen Testprogramm das ganze nachgestellt, konnte das Verhalten aber nicht reproduzieren.

In einem anderen Forum meinte jemand, dass könnte an den Threads liegen, die mein Programm hat (8 Stück)...


machst Du Dir es damit, den Fehler auf den Compiler zu schieben, IMHO ein bißchen zu einfach. Daß das Programm mit einem anderen Compiler läuft, heißt nicht, das es jetzt fehlerfrei ist. Multithreading kann schnell zu schwer verfolgbaren Fehlern führen. Dagegen ist ein vergessenes delete relativ harmlos und - da es ein reproduzierbarer Fehler ist - meines Erachtens gerade kein Heisenbug.
Die von Flo vorgeschlagene Vorgehensweise funzt BTW nur mit den MFC, ist aber ansonsten sehr zu empfehlen.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
28.02.2005, 14:13 Uhr
nullDog



Nochmal:

Dein Code klappt in meinem kleinen Testprogramm auch,
nur in meinem großen Programm nicht.
Ich habe ihn auch dort direkt zu Beginn in die main()-Funktion eingefügt.
Also wurden ja vermutlich auch noch keine Threads (die sich wie schwarze löchen verhalten müssten) erstellt.
Und siehe da, dort läuft es halt nicht.

Es müsste also vor der Main()-Funktion etwas passieren, was solch ein Verhalten bewirken könnte. Ne Idee was ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
28.02.2005, 14:26 Uhr
Tommix



Unsere Postings hatten sich überschnitten.
Wo der Fehler liegt, weiß ich nun auch nicht. Evtl. kannst Du das restliche Programm mal stückweise rauskommentieren, um den Fehler einzugrenzen.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
28.02.2005, 14:32 Uhr
nullDog



Wüßte nicht was ich noch rausnehmen könnte, die Main-Funktion bis auf obigen code
ist jetzt leer.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
28.02.2005, 14:40 Uhr
Tommix



Hast Du noch irgendwelche Variablen definiert? Vielleicht passiert in einem Konstruktor was.
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
28.02.2005, 14:50 Uhr
nullDog



Stimmt, ich habe einige globale Variablen bzw Objekte.
Bis auf <vector> stammen aber alle von mir und die Konstruktoren dienen lediglich
Variableninitialisiernugen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
28.02.2005, 16:00 Uhr
(un)wissender
Niveauwart


Scheint ein typischer Fall von einem Seiteneffekt zu sein. Du kannst davon ausgehen, dass der VC den Operator delete korrekt implementiert hat.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
28.02.2005, 16:07 Uhr
nullDog



Mir kommt es auch wie ein Seiteneffekt vor.
Ich will ja auch keinen Compiler verfluchen, doch zunächst bin ich froh dass der gcc korrekt läuft, nun kann ich mein Projekt nochmal richtig durchtesten und dann veröffentlichen.
Danach werde ich mich noch mal an den MSVC wenden um diverse Tests durchzuführen, die mir in den letzten 26 Tagen vorgeschlagen wurden, aber halt auch immer einen gewissen Aufwand benutzen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
028
28.02.2005, 20:41 Uhr
ao

(Operator)



Zitat von 0xdeadbeef:
Wenn der MSVC den Code nicht rafft, ist er buggy.

C++:
char * ICH_KOTZE = new char[32800000];
delete[] ICH_KOTZE;


ist gültiger Code, daran gibts nichts zu rütteln. Wenn der Speicher nicht freigegeben wird, such dir nen richtigen Compiler. Frag mal google nach dem MinGW Developer Studio, das könnte was für dich sein.

Hältst du es für wahrscheinlich, dass ein Compiler an dieser Stelle einen Fehler hat? Das sind doch Sachen, ohne die überhaupt nichts laufen würde.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: