<?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[Destruktor-Aufruf führt zu SIGILL]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lerne gerade C++ in Kombination mit Qt (dementsprechend bin ich auch hier neu). Gerade bereitet mir dabei ein ziemlich komischer Fehler Kopfzerbrechen:</p>
<p>Mein C++-Programm hat eine Klasse Level. Diese Klasse hat einen Destruktor, der wie folgt definiert ist:</p>
<pre><code class="language-cpp">Level::~Level()
{
    delete [] map;
    delete [] fogOfWar;
} // (*)
</code></pre>
<p>map ist ein char-Array, fogOfWar ist ein bool-Array.</p>
<p>Eine andere Klasse (Dungeon) hat ein Member, das wie folgt definiert ist:</p>
<pre><code class="language-cpp">Level*          currentLevel;
</code></pre>
<p>Auf diesen Pointer greife ich in einer Memberfunktion der Klasse Dungeon wie folgt zu:</p>
<pre><code class="language-cpp">Q_ASSERT(currentLevel);

            if(currentLevel)
                delete currentLevel; // (*)
            currentLevel = new Level(currentLevelID, this);
</code></pre>
<p>Leider erzeugt das aber ein SIGILL. Die Stacktrace zeigt dabei auf die beiden Zeilen, die ich oben mit einem Sternchen markiert habe,also auf der untersten Ebene auf die geschlossene Klammer (!) am Ende des Destruktors!</p>
<p>Darauf kann ich mir leider absolut keinen Reim machen - wie kommt dieser Fehler zustande, was könnte da das Problem sein? Das meiste, was ich zu diesem Problem ergooglet hatte, hatte irgendwas mit Assemblercode zu tun (gibt es bei mir nicht).</p>
<p>Noch ein paar Infos: Level erbt aus QObject (und erhält auch das dazugehörige Q_OBJECT-Makro), ich habe allerdings keine Ahnung, ob das mit dem Fehler zusammenhängt (bin noch ziemlicher Anfänger in C++).</p>
<p>Wenn ich alles in Level::~Level auskommentiere (also nur noch den Funktionskopf dastehen habe), tritt der Fehler weiterhin mit exakt dem gleichen Stack auf.</p>
<p>Weiteren Code kann ich auch gerne posten, ist allerdings ziemlich groß und ich habe keine Ahnung, was da interessant wäre und weiterhelfen würde.</p>
<p>Über Hilfe würde ich ich freuen.</p>
<p>Gruß,<br />
Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301211/destruktor-aufruf-führt-zu-sigill</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 02:59:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301211.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Mar 2012 22:14:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Wed, 21 Mar 2012 22:14:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lerne gerade C++ in Kombination mit Qt (dementsprechend bin ich auch hier neu). Gerade bereitet mir dabei ein ziemlich komischer Fehler Kopfzerbrechen:</p>
<p>Mein C++-Programm hat eine Klasse Level. Diese Klasse hat einen Destruktor, der wie folgt definiert ist:</p>
<pre><code class="language-cpp">Level::~Level()
{
    delete [] map;
    delete [] fogOfWar;
} // (*)
</code></pre>
<p>map ist ein char-Array, fogOfWar ist ein bool-Array.</p>
<p>Eine andere Klasse (Dungeon) hat ein Member, das wie folgt definiert ist:</p>
<pre><code class="language-cpp">Level*          currentLevel;
</code></pre>
<p>Auf diesen Pointer greife ich in einer Memberfunktion der Klasse Dungeon wie folgt zu:</p>
<pre><code class="language-cpp">Q_ASSERT(currentLevel);

            if(currentLevel)
                delete currentLevel; // (*)
            currentLevel = new Level(currentLevelID, this);
</code></pre>
<p>Leider erzeugt das aber ein SIGILL. Die Stacktrace zeigt dabei auf die beiden Zeilen, die ich oben mit einem Sternchen markiert habe,also auf der untersten Ebene auf die geschlossene Klammer (!) am Ende des Destruktors!</p>
<p>Darauf kann ich mir leider absolut keinen Reim machen - wie kommt dieser Fehler zustande, was könnte da das Problem sein? Das meiste, was ich zu diesem Problem ergooglet hatte, hatte irgendwas mit Assemblercode zu tun (gibt es bei mir nicht).</p>
<p>Noch ein paar Infos: Level erbt aus QObject (und erhält auch das dazugehörige Q_OBJECT-Makro), ich habe allerdings keine Ahnung, ob das mit dem Fehler zusammenhängt (bin noch ziemlicher Anfänger in C++).</p>
<p>Wenn ich alles in Level::~Level auskommentiere (also nur noch den Funktionskopf dastehen habe), tritt der Fehler weiterhin mit exakt dem gleichen Stack auf.</p>
<p>Weiteren Code kann ich auch gerne posten, ist allerdings ziemlich groß und ich habe keine Ahnung, was da interessant wäre und weiterhelfen würde.</p>
<p>Über Hilfe würde ich ich freuen.</p>
<p>Gruß,<br />
Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193886</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Wed, 21 Mar 2012 22:25:33 GMT]]></title><description><![CDATA[<p>Ich rate mal: Regel der großen Drei verletzt. Guck auch diesen Thread von heute, wie es richtig geht:<br />
<a href="http://www.c-plusplus.net/forum/301203" rel="nofollow">http://www.c-plusplus.net/forum/301203</a></p>
<p>Aber all die Probleme sparst du dir, wenn du std::vector nutzt. Dein für die Speicherverwaltung nötiger Code wird dann nicht 50 Zeilen lang, sondern nur Null.</p>
<p>Und bei mehreren Feldern in der Klasse, musst du das strenggenommen sowieso in RAII-Unterklassen (wie eben std::vector) auslagern, um auch im Konstruktor Exceptionsicher zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193891</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:25:33 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Wed, 21 Mar 2012 22:47:39 GMT]]></title><description><![CDATA[<p>QObjects löschen ihre Kinder, wenn sie gelöscht werden. Pass auf, dass du keinen double free bekommst. Normal muss man QObjects nicht selber löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193904</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:47:39 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Wed, 21 Mar 2012 22:54:16 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>QObjects löschen ihre Kinder, wenn sie gelöscht werden. Pass auf, dass du keinen double free bekommst. Normal muss man QObjects nicht selber löschen.</p>
</blockquote>
<p>Öh, der Aufruf von &quot;delete currentLevel&quot; ist nicht aus dem Destruktor von Dungeon (der Dungeon ist Parent des Levels), sondern aus einer Funktion, die einen neuen Level erzeugt und den alten &quot;entsorgt&quot;. Dabei wird dann auch der Pointer überschrieben.</p>
<p>Es wäre natürlich möglich, den alten Level nicht zu löschen und zu warten, bis er beim Programmende entfernt wird (der Dungeon wird erst bei Programmende gelöscht), das würde aber den Arbeitsspeicher zumüllen und kommt mir unsauber vor. Gibt es da eine elegantere Methode?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193907</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 00:23:26 GMT]]></title><description><![CDATA[<p>Ist jetzt nur geraten, aber probier mal das:</p>
<pre><code class="language-cpp">Q_ASSERT(currentLevel);

    if (currentLevel)
    {
        currentLevel-&gt;setParent(0); // &lt;----------
        delete currentLevel;
        currentLevel = 0;
    }

    currentLevel = new Level(currentLevelID, this);
</code></pre>
<p>EDIT: OK, wenn ich so drüber nachdenke... wenn das was hilft, dann macht die Qt was verkehrt. Anders gesagt: wird wohl vermutlich nix bringen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193945</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 22 Mar 2012 00:23:26 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 06:35:04 GMT]]></title><description><![CDATA[<p>initialisierst du currentLevel denn auch brav mit 0? Denn Zeiger werden mit einem zufälligen Wert initialisiert. Dann greift nämlich</p>
<pre><code class="language-cpp">if (currentLevel)
</code></pre>
<p>und im nächsten Schritt zerstörst du ein Objekt, das noch gar nicht existiert -&gt; BUMM!<br />
BTW.: wenn du diese Objekte eh selber managest, warum dann einen parent angeben? Lass den doch einfach weg.<br />
Und nein, Qt ist nicht so dumm. Wird ein QObject zerstört, versucht der parent NICHT, dieses nochmal zu löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193970</guid><dc:creator><![CDATA[arghonaut]]></dc:creator><pubDate>Thu, 22 Mar 2012 06:35:04 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 07:53:09 GMT]]></title><description><![CDATA[<p>CurrentLevel wird nicht mit 0 initialisiert, aber hat eigentlich nach dem Konstruktor immer einen Wert. Auf diesen wird vor dem Absturz auch schon mehrfach (erfolgreich) zugegriffen.</p>
<p>Den parent brauche ich eh, da läuft nicht nur die Qt-Objektverwaltung drüber. So gesehen schadet das dann auch nicht.</p>
<p>Gestern hatte ich auf QLists umgestellt und den Destruktor entfernt (Regel der 3 eingehalten), der Fehler war aber beim delete-Aufruf immer noch da.</p>
<p>Hier mal meine Klassendefinition (level.h):</p>
<pre><code class="language-cpp">class Level : public QObject
{
Q_OBJECT
public:
    explicit        Level(int level, QObject *parent = 0);

    int             getWidth();
    int             getHeight();
    //MapTile*        getMap();
    MapTile         getMapAt(int x, int y);
    void            setMapAt(int x, int y, MapTile value);
    void            connectRooms(const QRect *, const QRect *);
    bool            canGoTo(int x, int y);
    bool            canGoTo(int oldX, int oldY, Direction direction);

    QPoint          getPlayerSpawningPoint();
    QPoint          getRandomEmptySpace();
    QPoint          getRandomSpawningPoint();

    void            clearFogOfWar(int posX, int posY);

    //bool          hasEnemyAt(int x, int y);
    Enemy*          getEnemyAt(QPoint location);
    QList&lt;Enemy*&gt;*  getEnemies();

    QList&lt;Action&gt;   possibleActionsAt(int x, int y);

signals:
    void            fogOfWarCleared(int x, int y);

public slots:
    void            characterMoved(int x, int y);
    void            dropFogOfWar(); // completely drops FoW
    void            removeDeadEnemy(Enemy* enemy);

private:
    QList&lt;MapTile&gt;  map;
    QList&lt;bool&gt;     fogOfWar;

    int             height;
    int             width;
    bool            isConnected();
    void            analyzeConnections(int,int, bool*);

    inline MapTile  getInternalMapAt(int x, int y);
    QList&lt;Enemy*&gt;   enemies;
};
</code></pre>
<p>Die Implementierung würde den Rahmen etwas sprengen (sind fast 500 Zeilen), wenn's weiterhilft, kann ich den Code aber auch gerne noch posten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193986</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Thu, 22 Mar 2012 07:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 10:07:28 GMT]]></title><description><![CDATA[<p>Taschenschieber schrieb:</p>
<blockquote>
<p>Die Implementierung würde den Rahmen etwas sprengen (sind fast 500 Zeilen), wenn's weiterhilft, kann ich den Code aber auch gerne noch posten...</p>
</blockquote>
<p>Es würde weiterhelfen wenn du deine Implementierung auf das Wesentliche reduzierst - so dass man ein übersetzbares Programm erhält, bei dem der Fehler immernoch auftritt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194051</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 22 Mar 2012 10:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 14:03:51 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Es würde weiterhelfen wenn du deine Implementierung auf das Wesentliche reduzierst - so dass man ein übersetzbares Programm erhält, bei dem der Fehler immernoch auftritt.</p>
</blockquote>
<p>Und dabei würde es mir wiederum weiterhelfen, überhaupt mal zu wissen, was eigentlich mögliche Ursachen für einen SIGILL sind. Ansonsten wird das wohl ziemliches Gestocher im Nebel.</p>
<p>Leider sind alle Google-Treffer, die ich zu diesem Thema bisher hatte, mehr als vage und klingen eher danach, als würde dieses Signal eigentlich nur bei Compilerfehlern und Rumgespiele mit laufzeitgenerierten Funktionen auftreten (also Casts eines int-Arrays in eine Funktion und so Späße), andere potentielle Ursachen habe ich beim Googlen nicht gefunden. Also was wären denn mögliche Fehlerquellen, die sich nicht in einem SIGSEGV, sondern in einem SIGILL äußern? (Compiler ist G++4.4.3 unter Windows 7, 64bit)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194165</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Thu, 22 Mar 2012 14:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 14:29:33 GMT]]></title><description><![CDATA[<p>Taschenschieber schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Es würde weiterhelfen wenn du deine Implementierung auf das Wesentliche reduzierst - so dass man ein übersetzbares Programm erhält, bei dem der Fehler immernoch auftritt.</p>
</blockquote>
<p>Und dabei würde es mir wiederum weiterhelfen, überhaupt mal zu wissen, was eigentlich mögliche Ursachen für einen SIGILL sind. Ansonsten wird das wohl ziemliches Gestocher im Nebel.</p>
</blockquote>
<p>Steht da nicht mehr bei? Oft steht da was über die Ursache. Wenn du es eingestellt hast, bekommt du sogar einen Coredump. Vielleicht versteckt deine Umgebung diese Details vor dir, aber sie sind bestimmt irgendwo zu finden.</p>
<p>SIGKILL ist jedenfalls ein ziemlich hefitges Signal und wird vom Betriebssystem nur in Ausnahmefällen geschickt, zum Beispiel wenn der Kernel ganz dringend Arbeitsspeicher braucht und quasi einen Prozess zu Gunsten der Allgemeinheit opfern muss (ja, es geht rau zu in der Prozesswelt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ). Sofern solche Ausnahmefälle nicht vorliegen, sollte das Signal von einem anderen Programm stammen. Vielleicht eine IDE oder ein Debugger, in denen das Programm läuft? Die sollten das dann natürlich irgendwo melden, aber da musst du natürlich erst nach suchen. Falls es doch das Betriebssystem ist, was das schickt, sollte es eine Nachricht in seine Logdateien schreiben. Wie schon gesagt, ist ein automatisches SIGKILL eine heftige Aktion, das passiert nicht mal eben so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194192</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 22 Mar 2012 14:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 14:32:12 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Du verwechselst wohl SIGKILL mit SIGILL. SIGILL steht für ILLegal instruction.<br />
Siehe: <a href="http://en.wikipedia.org/wiki/SIGILL" rel="nofollow">http://en.wikipedia.org/wiki/SIGILL</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194193</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 22 Mar 2012 14:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 14:38:47 GMT]]></title><description><![CDATA[<p>Eher ein freudscher Verleser. Zu viele Rechtschreibfehler im Forum lassen mich manchmal Buchstaben ergänzen, wo es eigentlich richtig war.</p>
<p>Immerhin hat der Threadersteller nun auch eine Erklärung zu SIGKILL, wenn er ihm mal begegnet und die Wikipediaseite erklärt die Ursachen von SIGILL.</p>
<p>edit: Ich empfehle übrigens mal valgrind mit allen Tests auf das Programm loszulassen. Und.oder sich mal einen Coredump anschauen. Oder im Debugger schauen, warum genau die Anweisung fehlschlägt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194197</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 22 Mar 2012 14:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 15:55:19 GMT]]></title><description><![CDATA[<p>Valgrind ist eher schwierig, da dürfte ich erstmal eine vollständige Entwicklungsumgebung unter Linux aufsetzen, für Win gibt es das ja leider nicht.</p>
<p>Der Debugger hat sich aber doch noch erbarmt, ein paar mehr Details auszugeben, und zwar zeigt der Stack hierhin:</p>
<pre><code>#0  0x0f543180 in ?? ()
No symbol table info available.
#1  0x6a225b5e in QObjectPrivate::deleteChildren (this=0xf4d4638) at kernel\qobject.cpp:1908
        i = 1
        reallyWasDeleted = true
#2  0x6a223bde in QObject::~QObject (this=0xd0921d8, __in_chrg=&lt;value optimized out&gt;) at kernel\qobject.cpp:927
        d = 0xf4d4638
#3  0x00420e80 in Level::~Level (this=0xd0921d8, __in_chrg=&lt;value optimized out&gt;) at debug//../level.h:38
No locals.
</code></pre>
<p>Die genaue Fehlermeldung im Debugger ist &quot;Illegal instruction (Signal SIGILL)&quot;.</p>
<p>Und mit Eingabe des Funktionsnamens &quot;QObjectPrivate::deleteChildren&quot; (der mir bisher wirklich noch nicht aufgefallen war...) weiß auch Google eine Lösung: Level hat Kinder, die auf dem Stack anstatt auf dem Heap angelegt werden - diese werden gelöscht, wenn der Scope abläuft, aber der Parent versucht trotzdem noch, das Kind zu entfernen, wenn der Parent gelöscht werden soll. Dabei tritt dann verständlicherweise ein Fehler auf.</p>
<p>Mal gucken, ob ich das Problem mit dieser Erkenntnis gelöst kriege. Danke jedenfalls an alle Helfer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194258</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Thu, 22 Mar 2012 15:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 16:00:18 GMT]]></title><description><![CDATA[<p>Ist es denn überhaupt möglich Stack Objekte als Kind in einem Qt Objekt zu haben.<br />
Normalerweise tut man das ja nicht, da Qt selber immer den Speicher aufräumt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194265</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 22 Mar 2012 16:00:18 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 16:05:53 GMT]]></title><description><![CDATA[<p>Quelle war dieser Link hier: <a href="http://comments.gmane.org/gmane.comp.lib.qt.general/33444" rel="nofollow">http://comments.gmane.org/gmane.comp.lib.qt.general/33444</a></p>
<p>edit: Und ja, das war wohl eine Fehlinformation. Zu früh gefreut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194267</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Thu, 22 Mar 2012 16:05:53 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 16:10:49 GMT]]></title><description><![CDATA[<blockquote>
<p>Leider erzeugt das aber ein SIGILL. Die Stacktrace zeigt dabei auf die beiden Zeilen, die ich oben mit einem Sternchen markiert habe,also auf der untersten Ebene auf die geschlossene Klammer (!) am Ende des Destruktors!</p>
</blockquote>
<p>Das heißt eigentlich, das der Fehler bei automatischem code nach dem destruktor aufgetreten ist. Normalerweise irgendein destruktor, der noch ausgeführt wird. Spontan seh ich da jetzt keinen direkten schuldigen, aber ich würd mir eventuell</p>
<pre><code class="language-cpp">QList&lt;MapTile&gt;  map;
</code></pre>
<p>anschaun, das ist der einzige Kandidat den ich auf den ersten blick als schuldigen sehe (außer du hast deinen destruktor noch etwas reduziert, denn du gepostet hast)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194270</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Thu, 22 Mar 2012 16:10:49 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 16:12:21 GMT]]></title><description><![CDATA[<p>Wie gesagt, meine Klasse hat keinen expliziten Destruktor mehr. Trotzdem tritt noch ein Fehler in Level::~Level() auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194271</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Thu, 22 Mar 2012 16:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 16:18:02 GMT]]></title><description><![CDATA[<p>Nicht &quot;in&quot; - &quot;danach&quot;, also nach Level::~Level().<br />
Deswegen ist der cursor auch am Ende der geschweiften Klammer, und nicht bei einer Code-Zeile im D-Tor, würd ich mal behaupten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194273</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Thu, 22 Mar 2012 16:18:02 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 16:39:01 GMT]]></title><description><![CDATA[<p>Taschenschieber schrieb:</p>
<blockquote>
<p>Wie gesagt, meine Klasse hat keinen expliziten Destruktor mehr. Trotzdem tritt noch ein Fehler in Level::~Level() auf.</p>
</blockquote>
<p>Einfache klare Frage:<br />
hast du Kinder die auf dem Stack angelegt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194284</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 22 Mar 2012 16:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 16:42:57 GMT]]></title><description><![CDATA[<p>Level hat Member, die auf dem Stack angelegt werden, diese sind aber keine Kinder von Dungeon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194289</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Thu, 22 Mar 2012 16:42:57 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Thu, 22 Mar 2012 20:08:15 GMT]]></title><description><![CDATA[<p>kleiner Troll schrieb:</p>
<blockquote>
<p>Nicht &quot;in&quot; - &quot;danach&quot;, also nach Level::~Level().<br />
Deswegen ist der cursor auch am Ende der geschweiften Klammer, und nicht bei einer Code-Zeile im D-Tor, würd ich mal behaupten.</p>
</blockquote>
<p>Nee. Es ist normal, dass der Cursor im Callstack auf der nächsten Anweisung steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194355</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Thu, 22 Mar 2012 20:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Fri, 23 Mar 2012 09:49:30 GMT]]></title><description><![CDATA[<p>Taschenschieber schrieb:</p>
<blockquote>
<p>Level hat Member, die auf dem Stack angelegt werden, diese sind aber keine Kinder von Dungeon.</p>
</blockquote>
<p>Das war nicht die Frage.<br />
Du läufst irgendwann in ein deleteChildren() rein. dh du hast irgendwo ein Objekt dem du Kinder gegeben hast. zB indem du setParent() für das Kind aufgerufen hast.</p>
<p>Und die Frage ist ob du hier uU Stack Objekte als Kind verwendest. Denn deleteChildren() schlägt idR nur dann fehl, wenn es ein delete auf ein Stack Objekt macht.</p>
<p>Welche Member deine Objekte haben ist dabei nicht wichtig. Die Frage ist nur, kann ich das Objekt per delete löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194515</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 23 Mar 2012 09:49:30 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Fri, 23 Mar 2012 13:52:43 GMT]]></title><description><![CDATA[<p>Laut seiner Deklaration von der ersten Seite kommt für diesen Effekt eigentlich nur noch MapTile infrage. Er hat ja keine von QObject abgeleiteten Member.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194614</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 23 Mar 2012 13:52:43 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor-Aufruf führt zu SIGILL on Fri, 23 Mar 2012 15:07:08 GMT]]></title><description><![CDATA[<p>Der Typ MapTile ist übrigens ein enum. Die Tiles sind also auch eher unschuldig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194650</guid><dc:creator><![CDATA[Taschenschieber]]></dc:creator><pubDate>Fri, 23 Mar 2012 15:07:08 GMT</pubDate></item></channel></rss>