C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Speicherleck

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Alexander Dietz
Guest





PostPosted: Mon May 24, 2004 7:33 am    Post subject: Speicherleck Reply with quote



Hallo,

ich habe einige Fragen zu Speicherlecks und wie sie ein 'segmentation
fault' waehrend der Programmausfuehrung verursachen koennen.

Soweit ich weiss, entstehen Speicherlecks, wenn Speicher allokiert
wird aber nicht mehr freigegeben wird (Habe z.B. ein char* ch=new
char[100]; aber kein entsprechendes delete[]).
Aber wie kann es dadurch zum segmentation fault kommen? Ist dieser
Speicher nicht bis zum Ende des Programmes so gesichert, damit der
Speicher keinem anderen Bereich zugewiesen werden kann?

Und wodurch entsteht ein 'segmantation fault' genau?




Fuer sinnvolle Hilfe waere ich sehr dankbar!

Gruss
Alexander Dietz

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Torsten Schneider
Guest





PostPosted: Mon May 24, 2004 9:15 am    Post subject: Re: Speicherleck Reply with quote



Alexander Dietz <alexd4351 (AT) compuserve (DOT) de> wrote:

Quote:
Und wodurch entsteht ein 'segmantation fault' genau?

Wenn versucht wird, auf Speicherbereiche zuzugreifen, die das aktuelle
Programm gar nicht benutzen darf.


Grüße, Torsten

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Winkler
Guest





PostPosted: Mon May 24, 2004 9:29 am    Post subject: Re: Speicherleck Reply with quote



Alexander Dietz wrote:
Quote:
Hallo,

ich habe einige Fragen zu Speicherlecks und wie sie ein 'segmentation
fault' waehrend der Programmausfuehrung verursachen koennen.

Soweit ich weiss, entstehen Speicherlecks, wenn Speicher allokiert
wird aber nicht mehr freigegeben wird (Habe z.B. ein char* ch=new
char[100]; aber kein entsprechendes delete[]).

Zum Beispiel.

Quote:
Aber wie kann es dadurch zum segmentation fault kommen?

_Dadurch_ sicher nicht. Eher, daß du irgendwelche Arraygrenzen
überschreitest. (Die Verwendung von new char[100] legt nahe, daß so
etwas passieren kann...)
Oder daß du ein Objekt zweimal deletest, weil deinem Programm nicht klar
ist, daß dieser Pointer auf kein gültiges Objekt mehr zeigt.
Oder du machst Pointerarithmetik, ohne genau zu wissen, was du tust.

Quote:
Ist dieser
Speicher nicht bis zum Ende des Programmes so gesichert, damit der
Speicher keinem anderen Bereich zugewiesen werden kann?

Er gehört deinem Programm.

Quote:

Und wodurch entsteht ein 'segmantation fault' genau?

Indem dein Programm auf Speicher zugreift, der ihm _nicht_ gehört. Oder
indem es Schreibzugriffe auf Speicherbereiche versucht, auf die es nur
Lesezugriff hat.

Im übrigen finde ich es bemerkenswert, wie du innerhalb von zwei Minuten
drei ähnliche, aber nicht identische Postings verfassen kannst.
Programmierst du auch so schnell wie du schreibst? ;-)

Gruß
Martin
--
http://www.jumli.de
http://www.jumlidev.de/forum/

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Alexander Dietz
Guest





PostPosted: Thu May 27, 2004 7:22 am    Post subject: Re: Speicherleck Reply with quote

Martin Winkler <martin_winkler (AT) gmx (DOT) de> wrote

Quote:
Alexander Dietz wrote:
Hallo,

ich habe einige Fragen zu Speicherlecks und wie sie ein 'segmentation
fault' waehrend der Programmausfuehrung verursachen koennen.

Soweit ich weiss, entstehen Speicherlecks, wenn Speicher allokiert
wird aber nicht mehr freigegeben wird (Habe z.B. ein char* ch=new
char[100]; aber kein entsprechendes delete[]).

Zum Beispiel.

Aber wie kann es dadurch zum segmentation fault kommen?

_Dadurch_ sicher nicht. Eher, daß du irgendwelche Arraygrenzen
überschreitest. (Die Verwendung von new char[100] legt nahe, daß so
etwas passieren kann...)
Oder daß du ein Objekt zweimal deletest, weil deinem Programm nicht klar
ist, daß dieser Pointer auf kein gültiges Objekt mehr zeigt.
Oder du machst Pointerarithmetik, ohne genau zu wissen, was du tust.

Ist dieser
Speicher nicht bis zum Ende des Programmes so gesichert, damit der
Speicher keinem anderen Bereich zugewiesen werden kann?

Er gehört deinem Programm.


Und wodurch entsteht ein 'segmantation fault' genau?

Indem dein Programm auf Speicher zugreift, der ihm _nicht_ gehört. Oder
indem es Schreibzugriffe auf Speicherbereiche versucht, auf die es nur
Lesezugriff hat.

Im übrigen finde ich es bemerkenswert, wie du innerhalb von zwei Minuten
drei ähnliche, aber nicht identische Postings verfassen kannst.
Programmierst du auch so schnell wie du schreibst? Wink

Zum letzten Punkt: Die Postings habe ich vorher verfasst, nur
gleichzeitig gepostst...

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
James Kanze
Guest





PostPosted: Fri May 28, 2004 9:18 pm    Post subject: Re: Speicherleck Reply with quote

Martin Winkler <martin_winkler (AT) gmx (DOT) de> writes:

Quote:
Alexander Dietz wrote:

ich habe einige Fragen zu Speicherlecks und wie sie ein
'segmentation fault' waehrend der Programmausfuehrung verursachen
koennen. Soweit ich weiss, entstehen Speicherlecks, wenn Speicher
allokiert wird aber nicht mehr freigegeben wird (Habe z.B. ein
char* ch=new char[100]; aber kein entsprechendes delete[]).

Zum Beispiel.

Aber wie kann es dadurch zum segmentation fault kommen?

_Dadurch_ sicher nicht.

Mit älteren Kompilern doch. Durch einen Speicherleck läuft der
Speicher irgendwann aus. In älteren Implementierung heißt es, dass
der new-Operator einen NULL-Zeiger zurückgibt. Und wenn man nicht
darauf testet...

Unter einigen Betriebssystemen auch (unter anderen Linux) wir Speicher
faul allokiert. Das heißt, dass die Systemanforderung liefert eine
gültige Adresse zurück, ohne zu versichern, dass sie später die
benötigen Speicherseiten anlegen können. Wenn es also später
ankommt, dass es tatsächlich keine Seite dafür gibt, bleibt als
einzige Möglichkeit üblig, den Prozeß (oder besser gesagt, ein
Prozeß) zu töten.

Quote:
Eher, daß du irgendwelche Arraygrenzen überschreitest.

Oder vielleicht noch häufiger: weil man angst von Speicherlecken hat,
hat man den Speicher zu früh befreit. Das Benutzen von schon
befreiten Speicher führt auch oft zur segmentation faults.

In der Tat habe ich dieses Problem häufiger gesehen als
Speicherlecke. Man redet so viel darüber, wie wichtig es ist, den
Speicher zu befreien, dass der Programmierer ihn zweimal befreit. Und in
diesem Fall gilt es nicht, besser zweimal als keinmal.

(Aber ich gebe zu, in C war etwas wie:
char* p = malloc( strlen( s ) ) ;
strcpy( p, s ) ;
einer der häufigsten Grunde segmentation Faults.)

Quote:
(Die Verwendung von new char[100] legt nahe, daß so etwas
passieren kann...) Oder daß du ein Objekt zweimal deletest, weil
deinem Programm nicht klar ist, daß dieser Pointer auf kein
gültiges Objekt mehr zeigt. Oder du machst Pointerarithmetik,
ohne genau zu wissen, was du tust.

Ist dieser Speicher nicht bis zum Ende des Programmes so
gesichert, damit der Speicher keinem anderen Bereich zugewiesen
werden kann?

Er gehört deinem Programm.

Und wodurch entsteht ein 'segmantation fault' genau?

Indem dein Programm auf Speicher zugreift, der ihm _nicht_
gehört. Oder indem es Schreibzugriffe auf Speicherbereiche
versucht, auf die es nur Lesezugriff hat.

Das ist eine Wahrheit, die trügt. Tatsächlich stimmt es, aber
eine der häufigsten Weise, wobei man darauf kommt, ist durch das
überschreiben vom Speicher, dass man nicht überschreiben soll. Zum
Beispiel, schon befreitem Speicher.
--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.