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 

Zugriff auf double -> segmentation fault

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





PostPosted: Tue May 04, 2004 1:49 pm    Post subject: Zugriff auf double -> segmentation fault Reply with quote



Seltsames Problem:

Ich habe eine double-Membervariable in meiner Klasse. Evtl. wird die nie
initialisiert (ich arbeite mit komplexem Code, den jmd anderes geschrieben
hat).

Bei einer bestimmten Stelle in der Programmausführung tritt ein
Segmentation Fault ein. Mit dem Debugger-Tool valgrind habe ich nun
herausgefunden, dass ein Read-Zugriff auf diese double-Variable den
Segmentation Fault verursacht:

double val;
....
return val == log(0.0);

Invalid read of size 8 (test.h:10)
segmentation fault

Für die einfache return-Zeile!

Jetzt habe ich mal eine NULL-Abfrage hinzugefügt:

if(val == NULL){
// bla
}

Dann tritt sogar der Segmentation Fault in der Zeile mit der
if-NULL-Abfrage auf (laut valgrind)! Mit der NULL-Abfrage bekomme ich
zusätzlich eine unschöne g++Warnung: "NULL used in arithmetic"

Also was macht man mit so einem evtl. uninitialisierten double-Wert?

Danke,
Markus

--
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
Tibor Pausz
Guest





PostPosted: Fri May 07, 2004 1:41 pm    Post subject: Re: Zugriff auf double -> segmentation fault Reply with quote



Markus Dehmann <markus.cl (AT) gmx (DOT) de> wrote:

Quote:
return val == log(0.0);

Die Zeile ist Quatsch!
lg 0 ist mathematisch nicht definiert.

--
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
Hendrik Belitz
Guest





PostPosted: Fri May 07, 2004 1:43 pm    Post subject: Re: Zugriff auf double -> segmentation fault Reply with quote



Markus Dehmann wrote:

Quote:
double val;
...
return val == log(0.0);

log(0.0) ist ja schonmal keine so gute Idee...
und Klammern könnten hier auch nicht schaden

Quote:
Also was macht man mit so einem evtl. uninitialisierten double-Wert?

Initialisieren wäre gut. Ansonsten wäre der vollständige Code nützlich, so
läßt sich da garnichts sagen...
--
To get my real email adress, remove the two onkas
--
Dipl.-Inform. Hendrik Belitz
Central Institute of Electronics
Research Center Juelich

--
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
helmut zeisel
Guest





PostPosted: Fri May 07, 2004 2:53 pm    Post subject: Re: Zugriff auf double -> segmentation fault Reply with quote

Tibor Pausz wrote:
Quote:
Markus Dehmann <markus.cl (AT) gmx (DOT) de> wrote:


return val == log(0.0);


Die Zeile ist Quatsch!
lg 0 ist mathematisch nicht definiert.

Aber z.B. in IEEE Arithmetik.

Helmut

--
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 Robitzki
Guest





PostPosted: Fri May 07, 2004 3:59 pm    Post subject: Re: Zugriff auf double -> segmentation fault Reply with quote

Markus Dehmann wrote:

Quote:
Seltsames Problem:

Ich habe eine double-Membervariable in meiner Klasse. Evtl. wird die
nie initialisiert (ich arbeite mit komplexem Code, den jmd anderes
geschrieben hat).

Bei einer bestimmten Stelle in der Programmausführung tritt ein
Segmentation Fault ein. Mit dem Debugger-Tool valgrind habe ich nun
herausgefunden, dass ein Read-Zugriff auf diese double-Variable den
Segmentation Fault verursacht:

double val;
...
return val == log(0.0);

Invalid read of size 8 (test.h:10)
segmentation fault

Für die einfache return-Zeile!

Jetzt habe ich mal eine NULL-Abfrage hinzugefügt:

if(val == NULL){
// bla
}

Dann tritt sogar der Segmentation Fault in der Zeile mit der
if-NULL-Abfrage auf (laut valgrind)! Mit der NULL-Abfrage bekomme ich
zusätzlich eine unschöne g++Warnung: "NULL used in arithmetic"

Also was macht man mit so einem evtl. uninitialisierten double-Wert?

Keine Ahnung. Mein Tip wäre aber eher, das die Funktion über einen
dereferenzierten null Zeiger (oder Ähnlichem) aufrufst.

type* t = 0;
t->f();

schreib mal ein assert(this); an den Anfang der Funktion.

mfg 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
Stefan Reuther
Guest





PostPosted: Fri May 07, 2004 5:52 pm    Post subject: Re: Zugriff auf double -> segmentation fault Reply with quote

Markus Dehmann wrote:
Quote:
Ich habe eine double-Membervariable in meiner Klasse. Evtl. wird die
nie initialisiert (ich arbeite mit komplexem Code, den jmd anderes
geschrieben hat).

Bei einer bestimmten Stelle in der Programmausführung tritt ein
Segmentation Fault ein.

Dann war wohl der this-Zeiger ungültig.

Quote:
Jetzt habe ich mal eine NULL-Abfrage hinzugefügt:

if(val == NULL){
// bla
}

Dann tritt sogar der Segmentation Fault in der Zeile mit der
if-NULL-Abfrage auf (laut valgrind)! Mit der NULL-Abfrage bekomme ich
zusätzlich eine unschöne g++Warnung: "NULL used in arithmetic"

Man vergleicht ja auch nicht double-'val' mit Zeiger-'NULL'.

Ich würde wetten, dass der Fehler auch beim Auslesen eines 'int' oder
'char*' oder 'std::vector<YellowSubmarine>' auftreten würde. Auf
gängigen Architekturen hat 'double' zwar IIRC trap-representations
(signalling NaN), die geben dir aber ein SIGFPE. Bleibt also nur der
this-Zeiger.Und der kann auf viele Arten verschutt gegangen sein.


Stefan

--
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
Horst Kraemer
Guest





PostPosted: Sat May 08, 2004 5:33 pm    Post subject: Re: Zugriff auf double -> segmentation fault Reply with quote

On Tue, 04 May 2004 09:49:12 -0400, "Markus Dehmann"
<markus.cl (AT) gmx (DOT) de> wrote:

Quote:
Seltsames Problem:

Ich habe eine double-Membervariable in meiner Klasse. Evtl. wird die nie
initialisiert (ich arbeite mit komplexem Code, den jmd anderes geschrieben
hat).

Bei einer bestimmten Stelle in der Programmausführung tritt ein
Segmentation Fault ein. Mit dem Debugger-Tool valgrind habe ich nun
herausgefunden, dass ein Read-Zugriff auf diese double-Variable den
Segmentation Fault verursacht:

double val;
...
return val == log(0.0);

Invalid read of size 8 (test.h:10)
segmentation fault

Für die einfache return-Zeile!

Jetzt habe ich mal eine NULL-Abfrage hinzugefügt:

if(val == NULL){
// bla
}

warum nicht val == 0 ?

Quote:
Dann tritt sogar der Segmentation Fault in der Zeile mit der
if-NULL-Abfrage auf (laut valgrind)! Mit der NULL-Abfrage bekomme ich
zusätzlich eine unschöne g++Warnung: "NULL used in arithmetic"

Richtig. Die Verwendung von NULL sollte sich auf Zeiger beschraenken,
denn nur *dafuer* ist dieses Makro bestimmt.


Quote:
Also was macht man mit so einem evtl. uninitialisierten double-Wert?

Nichts. Man initialisiert die Variable halt im c'tor Dazu sind
Konstruktoren da. Das Verhalten einer beliebigen Aktion mit dem Wert
einer uninitialisierten Variablen ist undefiniert - dazu zaehlen
natuerlich auch Vergleiche. Ich finde, es ist ein exzellentes Feature,
wenn der Vergleich einer uninitialisierten Variablen das Programm
crasht. Sollte vom naechsten C++-Standard vorgeschrieben werden ;-)

--
Horst

--
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.