Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Segmentation fault nach Übergabe an eine Funktion

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 <
000
11.09.2010, 00:02 Uhr
~ps
Gast


Hallo

mir ist gerade etwas eigenartiges passiert (ich denke ich habe es gelöst - aber die Ursache würde mich doch sehr interessieren)

also ich habe folgenden code:

MyClass c = get_my_class(some_val);
call_function(c);

void call_function(MyClass c)
{
c.do_something...
}

da bekomme ich wenn ich auf c in call_function zugreife einen Segmentation fault ...

wenn ich es aber so aufrufe:

call_function(get_my_class(some_val));

klappt es, nun würde mich interessieren wieso das sein kann ...

ich habe es hier vereinfacht dargestellt - in meinem Fall ist es etwas komplizierter da ich MyClass als handle verwende welche einen pointer auf eine andere Klasse hält ... das sollte aber egal sein ;-)

ich würde mich über eine Antwort freuen

mfg
ps
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.09.2010, 01:41 Uhr
0xdeadbeef
Gott
(Operator)


Vermutlich hast du die Dreierregel missachtet und keinen Kopierkonstruktor definiert. In dem Fall wird die Klasse kopiert, hält damit den selben Zeiger wie das temporäre Objekt, und sobald eines davon zerstört wird, zerstört dessen Destruktor das Objekt, auf das der Zeiger zeigt und invalidiert damit die Zeiger aller anderen Objekte.

Dass das ganze im zweiten Fall funktioniert, wird im Zweifel daran liegen, dass der Compiler die Kopie wegoptimiert. Das Verhalten ist natürlich nach wie vor undefiniert.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 11.09.2010 um 01:44 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: