<?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 string Zerlegung]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich arbeite zur Zeit an einem Programm, das unter anderem eine Funktion verwendet, die Tausendertrennpunkte in Strings setzt.<br />
(z.B. soll die Zahl 1000000 nach Einsatz der Funktion so aussehen: 1.000.000)</p>
<p>Ohne Ausführen dieser Funktion läuft alles einwandfrei.<br />
Mit ihr bekomme ich allerdings einen Segmentation fault.</p>
<p>Die Funktion sieht so aus:</p>
<pre><code>string setSeperationDots(string str){
    int commaPos = str.find(&quot;,&quot;);
    string beforeComma = str.substr(0, (str.length() - (str.length() - commaPos)));
    string afterComma = str.substr(commaPos + 1, (str.length() - commaPos));

    int dotCount = afterComma.length()/3;
    string finishString = &quot;,&quot; + afterComma;
    string endOfPartString = beforeComma;

    for (int i = 0; i &lt; dotCount; i++) {
    string partString = endOfPartString.substr(endOfPartString.length()-3, endOfPartString.length());    
    finishString = &quot;.&quot; + partString + finishString;
    endOfPartString = endOfPartString.substr(0, endOfPartString.length() - 3);
    }

    finishString = (beforeComma.substr(0, beforeComma.length()-(dotCount*3)))  + finishString;
    str = finishString;
    return str;
}
</code></pre>
<p>Hat jemand ne Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312016/segmentation-fault-bei-string-zerlegung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 05:37:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312016.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Dec 2012 08:53:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Segmentation fault bei string Zerlegung on Fri, 21 Dec 2012 08:53:25 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich arbeite zur Zeit an einem Programm, das unter anderem eine Funktion verwendet, die Tausendertrennpunkte in Strings setzt.<br />
(z.B. soll die Zahl 1000000 nach Einsatz der Funktion so aussehen: 1.000.000)</p>
<p>Ohne Ausführen dieser Funktion läuft alles einwandfrei.<br />
Mit ihr bekomme ich allerdings einen Segmentation fault.</p>
<p>Die Funktion sieht so aus:</p>
<pre><code>string setSeperationDots(string str){
    int commaPos = str.find(&quot;,&quot;);
    string beforeComma = str.substr(0, (str.length() - (str.length() - commaPos)));
    string afterComma = str.substr(commaPos + 1, (str.length() - commaPos));

    int dotCount = afterComma.length()/3;
    string finishString = &quot;,&quot; + afterComma;
    string endOfPartString = beforeComma;

    for (int i = 0; i &lt; dotCount; i++) {
    string partString = endOfPartString.substr(endOfPartString.length()-3, endOfPartString.length());    
    finishString = &quot;.&quot; + partString + finishString;
    endOfPartString = endOfPartString.substr(0, endOfPartString.length() - 3);
    }

    finishString = (beforeComma.substr(0, beforeComma.length()-(dotCount*3)))  + finishString;
    str = finishString;
    return str;
}
</code></pre>
<p>Hat jemand ne Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2282148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2282148</guid><dc:creator><![CDATA[R3aper]]></dc:creator><pubDate>Fri, 21 Dec 2012 08:53:25 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei string Zerlegung on Fri, 21 Dec 2012 09:09:31 GMT]]></title><description><![CDATA[<blockquote>
<p>Mit ihr bekomme ich allerdings einen Segmentation fault.</p>
</blockquote>
<p>Und in welcher Zeile? Finde es heraus! Ansonsten einige Anmerkungen:</p>
<pre><code class="language-cpp">int commaPos = str.find(&quot;,&quot;);
</code></pre>
<p>Was passiert, wenn str kein Komma enthaelt? Also der Rueckgabewert von <code>str.find</code> gleich <code>npos</code> ist?</p>
<pre><code class="language-cpp">(str.length() - (str.length() - commaPos)));
</code></pre>
<p>Was das denn? x - (x - a) = x - x + a = a</p>
<pre><code class="language-cpp">int dotCount = afterComma.length()/3;
</code></pre>
<p>Wird die Punkteanzahl nicht vom Teil vor dem Komma bestimmt?</p>
<pre><code class="language-cpp">string afterComma = str.substr(commaPos + 1, (str.length() - commaPos));
...
string finishString = &quot;,&quot; + afterComma;
</code></pre>
<p>Also mit der +1 haust du das Komma raus, um es dann wieder einzufuegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2282152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2282152</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 21 Dec 2012 09:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei string Zerlegung on Fri, 21 Dec 2012 09:05:21 GMT]]></title><description><![CDATA[<p>R3aper schrieb:</p>
<blockquote>
<p>Hat jemand ne Idee?</p>
</blockquote>
<p>Zeig uns das vollständige Beispielprogramm, ganz besonders den String der zum Aufruf benutzt wird.</p>
<p>Du hast keinerlei Abfragen, ob deine Aktionen überhaupt erfolgreich waren. So etwas wie find kann schließlich auch nichts finden, wenn nichts da sein sollte. Dann greifst du trotzdem auf den Index zu. Dieser ist aber ein Fehlerwert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Segfault.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2282155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2282155</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 21 Dec 2012 09:05:21 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei string Zerlegung on Fri, 21 Dec 2012 09:24:42 GMT]]></title><description><![CDATA[<p>Ok Leute, der Fehler ist gefunden.<br />
Wie knivil erwähnt hat sollte es nicht</p>
<pre><code>int dotCount = afterComma.length()/3;
</code></pre>
<p>heißen, sondern</p>
<pre><code>int dotCount = beforeComma.length()/3;
</code></pre>
<p>Da ist es natürlich klar, dass ich auf den falschen Speicher zugreife.</p>
<p>Trotzdem auch danke an den Rest, weil ihr bezüglich Codeoptimierung und Errorhandling natürlich recht habt. <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>
<p>Schönen Tag noch! <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/2282163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2282163</guid><dc:creator><![CDATA[R3aper]]></dc:creator><pubDate>Fri, 21 Dec 2012 09:24:42 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bei string Zerlegung on Fri, 21 Dec 2012 09:26:35 GMT]]></title><description><![CDATA[<p>Aktiviere den Debug-Modus deiner Standardbibliothek und lass dein Programm im Debugger laufen.</p>
<p>Ich hatte gestern abend eine &quot;assertion failure&quot;, weil ich mit 'nem Index für einen Vektor außerhalb des gültigen Bereichs war und das Programm kackte ab (terminate). Starte ich das mit dem Debugger (hier: GDB unter Windows), setze ich ein break auf _assert und lasse das Programm dann laufen, dann hält es an der besagten Stelle einfach an und ich kann mir den Stack Trace anzeigen lassen und angucken, was so in den Variablen steht. Das lernt man vielleicht nicht unbedingt aus seinem C++ Buch. Es ist aber wichtig und man sollte sich damit und mit der Doku des Compilers mal beschäftigt haben! So ein Debugmodus der Standardbibliothek ist echt praktisch. Das ist dann auch ein weiterer guter Grund für std::array&lt;int,5&gt; gegenüber int[5] weil mir std::array im Debugmodus eine Bereichsüberprüfung macht und so weiter...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2282166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2282166</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 21 Dec 2012 09:26:35 GMT</pubDate></item></channel></rss>