<?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[Seg-Fault Fehler]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe hier mal wieder ein Problem, wo ich denke ich habe überhaupt keine Ahnung von C++. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich habe einen Klasse, welche einen Timer per new erstellt, den Pointer sich in einer Datenstruktur merkt und die Datenstruktur in einen vector speichert. Wenn ich die Datenstruktur aus dem vector raushole (nach einiger Zeit), ist der Timer defekt, heißt er zeigt auf sinnlose Speicherbereiche. Hier in kurz, was ich mache:</p>
<pre><code>LTTimer * timer = new LTTimer(...);
State state;
state.setTimer(timer);
stateList.push_back(state);

... etwas später ...

State state = stateList.find(....); //finde das passende Stateobjekt
LTTimer * timer = state.getTimer();
timer-&gt;foo(....) // &lt;&lt;-- kracht
</code></pre>
<p>Die Methode state.setTimer(timer); ist:</p>
<pre><code>void setTimer(LTTimer * timer){
this-&gt;timer = timer;
}
</code></pre>
<p>Wenn ich statt dessen:</p>
<pre><code>void setTimer(LTTimer * timer){
this-&gt;timer = new LTTimer(timer);
}
</code></pre>
<p>Läuft es durch. Erzeugt natürlich Speicherlöcher ohne Ende, lässt mich aber vermuten, dass der Seg-fault tatsächlich was mit dem merken des Timers zu tun hat. Oder übersehe ich noch was anderes? Was könnte mein Problem sein?</p>
<p>Vielen Dank schon einmal. <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334055/seg-fault-fehler</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 03:48:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334055.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Aug 2015 09:42:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Seg-Fault Fehler on Wed, 19 Aug 2015 09:42:40 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe hier mal wieder ein Problem, wo ich denke ich habe überhaupt keine Ahnung von C++. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich habe einen Klasse, welche einen Timer per new erstellt, den Pointer sich in einer Datenstruktur merkt und die Datenstruktur in einen vector speichert. Wenn ich die Datenstruktur aus dem vector raushole (nach einiger Zeit), ist der Timer defekt, heißt er zeigt auf sinnlose Speicherbereiche. Hier in kurz, was ich mache:</p>
<pre><code>LTTimer * timer = new LTTimer(...);
State state;
state.setTimer(timer);
stateList.push_back(state);

... etwas später ...

State state = stateList.find(....); //finde das passende Stateobjekt
LTTimer * timer = state.getTimer();
timer-&gt;foo(....) // &lt;&lt;-- kracht
</code></pre>
<p>Die Methode state.setTimer(timer); ist:</p>
<pre><code>void setTimer(LTTimer * timer){
this-&gt;timer = timer;
}
</code></pre>
<p>Wenn ich statt dessen:</p>
<pre><code>void setTimer(LTTimer * timer){
this-&gt;timer = new LTTimer(timer);
}
</code></pre>
<p>Läuft es durch. Erzeugt natürlich Speicherlöcher ohne Ende, lässt mich aber vermuten, dass der Seg-fault tatsächlich was mit dem merken des Timers zu tun hat. Oder übersehe ich noch was anderes? Was könnte mein Problem sein?</p>
<p>Vielen Dank schon einmal. <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464615</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Wed, 19 Aug 2015 09:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Seg-Fault Fehler on Wed, 19 Aug 2015 09:57:09 GMT]]></title><description><![CDATA[<p>Der Code ist nicht schön, sollte aber funktionieren. Das es mit dem new im setTimer aufeinmal funktioniert ist schon sehr merkwürdig. Bist du sicher, dass dein ursprüngliches Timer Objekt nirgendwo gelöscht wird? Machen die LTTimer/State Copy-Konstruktoren irgendwas besonderes?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464619</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 19 Aug 2015 09:57:09 GMT</pubDate></item><item><title><![CDATA[Reply to Seg-Fault Fehler on Wed, 19 Aug 2015 10:27:27 GMT]]></title><description><![CDATA[<p>Hallo sebi707,</p>
<p>wie kann ich meinen Code schöner machen?</p>
<p>Im Constructor vom Timer mache ich:</p>
<pre><code>if (!mt.ltTimerQueue.contains(getReference())) {
                mt.ltTimerQueue.add(this);
            }//end if
</code></pre>
<p>Hier tut sich der Timer selber in eine Timerqueue bei seiner Mutter einreihen. Entfernen tut er sich selbst im Destructor:</p>
<pre><code>LTTimer::~LTTimer() {
            mt.ltTimerQueue.remove(getReference());
        }
</code></pre>
<p>Könnte es daran liegen? Früher fand ich dies ne total tolle Idee, aber da gabs auch noch nicht das State objekt. Mh. Denke fast. Oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464625</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Wed, 19 Aug 2015 10:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Seg-Fault Fehler on Wed, 19 Aug 2015 10:58:18 GMT]]></title><description><![CDATA[<p>Du benutzt also nackte Zeiger mit new und delete, die hin und her kopiert werden, und irgendwann stürzt dein Programm ab, weil der Zeiger auf Müll zeigt. Könnte es da einen Zusammenhang geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464627</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 19 Aug 2015 10:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to Seg-Fault Fehler on Wed, 19 Aug 2015 11:18:44 GMT]]></title><description><![CDATA[<p>Hallo manni,</p>
<p>na vom Prinzip hätte ich gedacht eigentlich nicht. Das Objekt, auf welches der Timer zeigt wird einmal angelegt. Dessen Adresse wird hin und her kopiert. Bei der ersten Nutzung vom Objekt, ist es Schrott. Zerstört soll das Objekt, auf welches der Pointer zeigt, erst viel viel später werden.</p>
<p>Der Pointer als solches ist doch quasi nur eine Zahl. Nebenläufigkeit gibt es nicht. Weiß daher nicht, was daran so schlimm sein soll ???.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464630</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Wed, 19 Aug 2015 11:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to Seg-Fault Fehler on Wed, 19 Aug 2015 11:19:34 GMT]]></title><description><![CDATA[<p>Anders gefragt: Wie merke ich mir den die Adresse eines Objektes, welches ich irgendwann mal brauche?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464631</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Wed, 19 Aug 2015 11:19:34 GMT</pubDate></item><item><title><![CDATA[Reply to Seg-Fault Fehler on Wed, 19 Aug 2015 11:30:40 GMT]]></title><description><![CDATA[<p>Die Frage ist nicht, wie du dir eine Adresse merkst, sondern wer wann das delete aufruft. Bei Problemen, wie du sie schilderst, wird meistens der Zeiger nach dem Löschen verwendet. Beliebt ist dabei sicher auch, Objekte und damit auch den Zeiger stumpf zu kopieren und im Destruktor zu löschen =&gt; jede Kopie löscht den gleichen Wert.</p>
<p>So ein stateList.push_back(state) riecht schon danach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464632</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 19 Aug 2015 11:30:40 GMT</pubDate></item></channel></rss>