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 ]
010
27.02.2005, 22:57 Uhr
Pablo
Supertux
(Operator)



Zitat von 0xdeadbeef:
Ich würd an deiner Stelle mal valgrind bemühen, das spuckt mehr Informationen aus. Gibts das für Windoze überhaupt? Naja - im Zweifel wirds bei cygwin dabei sein.




kann ich nur empfehlen, das Ding hat mir mehrmals echt geholfen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
27.02.2005, 23:25 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


unter VC sollte man wenn man dann die Speicherlecks da aufdecken will auch am anfang


C++:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif



sonst gibt er sonstwas aus, nur nicht die Memorylecks deines Programms
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
28.02.2005, 00:51 Uhr
ao

(Operator)



Zitat von nullDog:
Na gut, jedoch bleibt der Speicher trotzdem alloziert und wird im Laufe der Zeit immer mehr.

Was meinst du denn damit? Zu jedem new gehört genau ein delete bzw. delete [], das den Speicher wieder freigibt. Alles andere ist entweder ein Speicherleck oder ein Programmierfehler, der (virtual und Pablo sagten es schon) zum Absturz führen kann oder auch nicht.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
28.02.2005, 01:46 Uhr
nullDog



@FloSoft: habe Deinen Codeschnipsel mal eingefügt, wurde jedoch mit 80 Fehlern bestraft
z.B.
error C2065: 'DEBUG_NEW' : nichtdeklarierter Bezeichner
oder für die Zeile

C++:
char * namebuf = new char[50];


dann der Fehler:
error C2440: 'initializing' : 'int' kann nicht in 'char *' konvertiert werden



@ao:
Ich meine dass der Speicher nicht freigegeben wird wenn ich delete[] aufrufe.

ich habe jetzt direkt nach dem Mail-Funktionskopf folgenden code eingefügt:

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


Es werden schön um die 32MB alloziert aber nicht freigegeben.
Ich habe zum Spass diese zwei Aufrufe in einer Schleife laufen lassen (nicht zu oft ;-) )
Aber selbst dann wird kein Speicher freigegeben, mein Programm läuft munter mit > 200 MB vor sich hin und das gefällt mir gar nicht.

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) und an Pages im Speicher. Da kenn ich mich leider NULL aus.

Ich würd' schon fast vermuten dass es irgendwelche Compilereinstellungen(MSVC++) sind, die mir das Leben hier zur Hölle machen, aber auch da kenn ich mich nicht wirklich aus.
(Kommt davon wenn man direkt mit der netten MS-IDE beginnt anstatt mal mit nem gcc oder anderen rumzuspielen............

Ahhh, ich sehe sogar den richtigen Smiley für meinen aktuellen Zustand:
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
28.02.2005, 03:35 Uhr
0xdeadbeef
Gott
(Operator)


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.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
28.02.2005, 04:32 Uhr
nullDog



Ich glaubs langsam auch.

Ich habe gerade mit mehr oder weniger Aufwand mein Projekt nach DEVCPP gewuchtet und
siehe da es funktioniert !!!!!!!!!!!!!! (sollte man ja auch eigentlich von ausgehen)

Das ist schon hart. Da denkt man Memory-Leaks zu finden sei so super Zeitaufwendig - ist es ja auch, aber CompilerBUGs sind da ne Nummer krasser wenn man den Fehler bei sich sucht.


Also danke an alle die mich auf dem Leidensweg ein Stück weit begleitet haben.

Amen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
28.02.2005, 08:39 Uhr
(un)wissender
Niveauwart


Der MSVC ist ok. Dein Fehler ist die Betrachtungsweise. VC verfolgt eine andere Allokatorstrategie als die gcc. Versuch einfach mal

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


oft durchlaufen zu lassen, so x-tausend mal. Das sollte, wenn tatsächlich nichts freigegeben wird, nicht funktionieren.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
28.02.2005, 13:41 Uhr
nullDog



Ich habe jetzt schon des öfteren was von dieser mysteriösen Allozierungsstrategie gehört, aber so leid es mir tut, ich kann mich damit nicht anfreunden.

Ich habe jetzt 20 Mal den Code aufgerufen und mein Programm läuft mit 634MB oder sowas um den Dreh.

Code:
char * Buffy = new char[32800000];
delete[] Buffy;
Buffy = new char[32800000];
delete[] Buffy;
...
usw



Ich kann einfach nicht glauben, dass sich MS so eine blöde Strategie ausdenkt. Und wenn es so wäre, dann bin ich mit dem gcc ja wunderbar beraten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
28.02.2005, 13:49 Uhr
Th



Wie hast du denn unter Windows gecheckt, ob der Speicher freigegeben wurde? Der Taskmanager zeigt nicht sofort die Änderungen an. Aufgrund des virtuellen Speichers und des Pagings wird dem Prozeß solange Speicher bereitgestellt, bis ein anderes Programm Speicher benötigt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
28.02.2005, 13:58 Uhr
nullDog



Ich habe schon den Taskmanager benutzt, wüßte jetzt auch kein anderes Instrument.
Das Windows extrem lahm wurde und dass der Start des Programm extrem lange dauerte und dass er jetzt im Nachhinein immernoch nachbebt ;-) weist zumidest darauf hin, dass er auch
tatsächlich die 600MB gezogen hat und so etwas will ich niemandem zumuten der mein Programm benutzt.

Ich sag ja, in nem kleinen Testprogramm (ebenfals mit MSVC) klappt das alles ja wunderbar, auch der taskmanager kriegt die kleinste Veränderung im Speicher mit.

Nur die große Applikation, welche LUA,SDL,SDL_Mixer, STL nutzt macht da Faxen.
 
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: