Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » free?

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 ]
000
01.10.2004, 21:24 Uhr
Pablo
Supertux
(Operator)


Hi

Ich hab noch ne Frage, was ist der Unterschied zwischen:


C++:
CLAUSE** tmp;

tmp = set->clause_set;
free(tmp);



und


C++:
CLAUSE** tmp;

tmp = set->clause_set;
free(set->clause_set);


wobei clause_set ebenfalls ein CLAUSE** ist. Zeigen tmp und set->clause_set etwa nicht auf die gleiche Stelle? Wenn ich die erste Version benutze, dann bekomme ich


C++:
==8944== Invalid free() / delete / delete[]
==8944==    at 0x40025E7B: free (vg_replace_malloc.c:231)
==8944==    by 0x8048EED: destroySet (in /home/rex/projects/fsat/fsat-0.0.1/src/fsat)
==8944==    by 0x8048748: main (in /home/rex/projects/fsat/fsat-0.0.1/src/fsat)
==8944==    by 0x4025885B: __libc_start_main (in /lib/libc-2.3.3.so)
==8944==    Address 0x41071728 is 4 bytes inside a block of size 8 alloc'd
==8944==    at 0x40025BBE: malloc (vg_replace_malloc.c:153)
==8944==    by 0x8048E19: insertClause (in /home/rex/projects/fsat/fsat-0.0.1/src/fsat)
==8944==    by 0x8048713: main (in /home/rex/projects/fsat/fsat-0.0.1/src/fsat)
==8944==    by 0x4025885B: __libc_start_main (in /lib/libc-2.3.3.so)
==8944==



Wenn ich die 2 Version benutze, läuft alles fehlerfrei und der gesamte von mir reservierte Speicher wird freigegeben. Wo liegt der Unterschied?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 01.10.2004 um 21:25 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.10.2004, 23:33 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich weiss es nicht aber vermutlich versucht free dem zeiger nen wert zuzuweisen (NULL) was ihm dann in deinem zweiten fall nicht möglich ist da der zeiger dann nicht mehr existiert...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.10.2004, 23:50 Uhr
Pablo
Supertux
(Operator)


hä? nein, free macht die Zeiger nicht auf NULL und beide Zeiger existieren, das finde ich komisch.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.10.2004, 00:45 Uhr
virtual
Sexiest Bit alive
(Operator)


@Pablo
Die Ausdrücke oben sind gleichwertig. Das Problem liegt verm. woanders
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.10.2004, 00:56 Uhr
Pablo
Supertux
(Operator)



Zitat von virtual:
@Pablo
Die Ausdrücke oben sind gleichwertig. Das Problem liegt verm. woanders


Das dachte ich mir auch, wenn ich die zweite Version (obwohl ich tmp auch benutze, aber nicht in free), dann bekomme ich valgrind keine Fehler, das kann ich mir nicht erklären.

Wie sicher ist valgrind? Wenn man sowas bekommt


Code:
==6941== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
==6941== malloc/free: in use at exit: 0 bytes in 0 blocks.



kann man sucher sein, dass der Code keine Speicherlecks erzeugt? Oder kann valgrind nicht alle Fehler erkennen?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.10.2004, 11:36 Uhr
(un)wissender
Niveauwart


Ohne Valgrind zu kennen: es erkennt sicherlich nicht alle Fehler, bei Seiteneffekten, wie in deinem Programm wird es auch sehr schwierig.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.10.2004, 01:12 Uhr
ao

(Operator)



Zitat von Pablo:
Wenn ich die erste Version benutze, dann bekomme ich


C++:
... massig kryptische Fehlermeldungen ...



Wenn ich die 2 Version benutze, läuft alles fehlerfrei und der gesamte von mir reservierte Speicher wird freigegeben. Wo liegt der Unterschied?


Hast du denn bei Version 1 tatsächlich Speicherlecks, oder schlägt valgrind einfach nur Alarm, weil es irgendwas nicht kapiert?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.10.2004, 01:39 Uhr
Pablo
Supertux
(Operator)


Das weiß ich nicht, das war eben meine Frage ich hab mich die Version 2 entschieden, das schien mir sicherer, obwohl für mich beide identisch sind.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.10.2004, 02:06 Uhr
ao

(Operator)


Du kannst doch sicher feststellen, ob die Version 1 Speicher frisst oder nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
04.10.2004, 07:37 Uhr
Pablo
Supertux
(Operator)


nein, ich weiß nicht wie, sonst hätte ich dieses Thread nicht eröffnet.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: