<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Segmentation fault bei virtuellem Funktionsaufruf]]></title><description><![CDATA[<p>Hallo!</p>
<p>Folgendes Problem: ich habe einige Klassen, die alle eine gemeinsame Basisklasse haben, einige Funktionen sind virtuell.<br />
So hat die Klasse Parser zb. die Funktionen write() und setFinished(), wobei nur setFinished virtual deklariert ist.<br />
Die Klassen TableParser und BoolParser reimplementieren die virtuelle Funktion setFinished() .<br />
Nun wird ein Zeiger auf eine Klasse vom Typ Parser auf eine TableParser oder BoolParser Klasse gesetzt.</p>
<p>Der Aufruf nicht-virtueller Funktionen klappt, rufe ich eine virtuelle Funktion auf bricht das Programm ab. Woran kann das liegen?<br />
Das Ganze ist in QT, die Klassen erben jeweils von QObject, kann mir aber nicht vorstellen, dass das etwas damit zu tun hat, deswegen auch dieses Forum.</p>
<p>Vielen Dank!</p>
<p>Flo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204060/segmentation-fault-bei-virtuellem-funktionsaufruf</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 07:57:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204060.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Jan 2008 18:36:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Segmentation fault bei virtuellem Funktionsaufruf on Tue, 29 Jan 2008 18:36:06 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Folgendes Problem: ich habe einige Klassen, die alle eine gemeinsame Basisklasse haben, einige Funktionen sind virtuell.<br />
So hat die Klasse Parser zb. die Funktionen write() und setFinished(), wobei nur setFinished virtual deklariert ist.<br />
Die Klassen TableParser und BoolParser reimplementieren die virtuelle Funktion setFinished() .<br />
Nun wird ein Zeiger auf eine Klasse vom Typ Parser auf eine TableParser oder BoolParser Klasse gesetzt.</p>
<p>Der Aufruf nicht-virtueller Funktionen klappt, rufe ich eine virtuelle Funktion auf bricht das Programm ab. Woran kann das liegen?<br />
Das Ganze ist in QT, die Klassen erben jeweils von QObject, kann mir aber nicht vorstellen, dass das etwas damit zu tun hat, deswegen auch dieses Forum.</p>
<p>Vielen Dank!</p>
<p>Flo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445872</guid><dc:creator><![CDATA[flofloflo]]></dc:creator><pubDate>Tue, 29 Jan 2008 18:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei virtuellem Funktionsaufruf on Tue, 29 Jan 2008 18:41:13 GMT]]></title><description><![CDATA[<p>zeig mal ein paar aussagekräftige teile deines codes...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445876</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Tue, 29 Jan 2008 18:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei virtuellem Funktionsaufruf on Tue, 29 Jan 2008 18:50:17 GMT]]></title><description><![CDATA[<p>naja da gibts eigentlich nix nennenswertes</p>
<p>da brauche ich ja imo kein virtual:</p>
<pre><code>class TableParser : public Parser
</code></pre>
<p>und dann habe ich eben die deklarationen<br />
Basisklasse:</p>
<pre><code>virtual void setFinished();
</code></pre>
<p>Überladen:</p>
<pre><code>virtual void setFinished();
</code></pre>
<p>... sind identisch, genau so wie es sein sollte....</p>
<p>und bei der definition brauche ich ja kein virtual, also habe ich einfach so gemacht:</p>
<pre><code>void TableParser::finished() {
</code></pre>
<p>bzw.</p>
<pre><code>void Parser::finished() {
</code></pre>
<p>und der eigentliche Funktionsaufruf läuft über</p>
<pre><code>Parser * parser = new TableParser;
parser-&gt;setFinished();
</code></pre>
<p>das ist mir echt ein rätsel, warum nix funktioniert, ich probiere schon seit 2 stunden rum....</p>
<p>flo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445890</guid><dc:creator><![CDATA[flofloflo]]></dc:creator><pubDate>Tue, 29 Jan 2008 18:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei virtuellem Funktionsaufruf on Tue, 29 Jan 2008 18:52:55 GMT]]></title><description><![CDATA[<p>flofloflo schrieb:</p>
<blockquote>
<p>Der Aufruf nicht-virtueller Funktionen klappt, rufe ich eine virtuelle Funktion auf bricht das Programm ab. Woran kann das liegen?</p>
</blockquote>
<p>Die einzige Stelle wo virtuelle Funktionen Fehler verursachen sollten, sofern die Implementierung als solche stimmt:</p>
<p>a) Anwendung auf ein nicht vorhandenes Objekt (z.B. Pointerzuweisung einer temporären Variable)<br />
b) Slicing (such hierzu einfach mal), Kurzzusammengefasst: wenn man den abgeleiteten Teil &quot;abschneidet&quot;<br />
c) Direkt oder indiekte virtuelle Funktionsaufrufe aus Konstruktoren heraus (Da immer von der Basis zur Ableitung hin konstruiert wird).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445894</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Jan 2008 18:52:55 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei virtuellem Funktionsaufruf on Tue, 29 Jan 2008 18:56:46 GMT]]></title><description><![CDATA[<p>flofloflo schrieb:</p>
<blockquote>
<p>naja da gibts eigentlich nix nennenswertes...</p>
</blockquote>
<p>Vor allem sind die Codeausschnitte die du uns zeigst so kurz das es wirklich nicht Nennenswert für eine Aussage zum Fehler ist.</p>
<p>Edit: Deinen letzten zwei Zeilen nach schließe ich aber 1/2/3 aus, und sage Fehler in der Implementierung. Bitte nutze den Debugger, und prüfe wo genau der Absturz kommt.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1445899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445899</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Jan 2008 18:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei virtuellem Funktionsaufruf on Tue, 29 Jan 2008 19:10:53 GMT]]></title><description><![CDATA[<p>oops... ich bin ein idiot<br />
entschuldigt dass ich eure zeit in anspruch genommen habe.</p>
<pre><code>if(parser = 0)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1445917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1445917</guid><dc:creator><![CDATA[flofloflo]]></dc:creator><pubDate>Tue, 29 Jan 2008 19:10:53 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei virtuellem Funktionsaufruf on Wed, 30 Jan 2008 06:54:18 GMT]]></title><description><![CDATA[<p>flofloflo schrieb:</p>
<blockquote>
<p>oops... ich bin ein idiot<br />
entschuldigt dass ich eure zeit in anspruch genommen habe.</p>
<pre><code>if(parser = 0)
</code></pre>
</blockquote>
<p>Ein guter Compiler sollte dir hier aber eine Warnung geben (Schau mal nach ob man die Warnstufe erhöhen kann, in MSVC z.B. in den Projekteinstellungen unter gcc glaube ich -wall...).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1446074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1446074</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 30 Jan 2008 06:54:18 GMT</pubDate></item></channel></rss>