<?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[wundersame std::length_error-exception]]></title><description><![CDATA[<p>Hallo @ all,</p>
<p>ich bin auf einen (Programmier-)Fehler gestoßen, den ich mir nicht erklären kann, vllt wisst ihr Rat:</p>
<pre><code>std::string ret; 
for( std::basic_string&lt;unsigned char &gt;::const_iterator it = myString.cbegin(); it != myString.cend(); it++ )
    ret += (char) *it;
</code></pre>
<p>Obiger Code wirft eine std::length_error-exception...ABER</p>
<pre><code>std::string ret; 
std::basic_string&lt;unsigned char &gt;::const_iterator it = myString.cbegin();
for( ; it != myString.cend(); it++ )
    ret += (char) *it;
</code></pre>
<p>funktioniert...</p>
<p>Warum?!?</p>
<p>Danke und mfG<br />
Hlymur</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327042/wundersame-std-length_error-exception</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 21:28:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327042.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Jul 2014 17:06:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:06:37 GMT]]></title><description><![CDATA[<p>Hallo @ all,</p>
<p>ich bin auf einen (Programmier-)Fehler gestoßen, den ich mir nicht erklären kann, vllt wisst ihr Rat:</p>
<pre><code>std::string ret; 
for( std::basic_string&lt;unsigned char &gt;::const_iterator it = myString.cbegin(); it != myString.cend(); it++ )
    ret += (char) *it;
</code></pre>
<p>Obiger Code wirft eine std::length_error-exception...ABER</p>
<pre><code>std::string ret; 
std::basic_string&lt;unsigned char &gt;::const_iterator it = myString.cbegin();
for( ; it != myString.cend(); it++ )
    ret += (char) *it;
</code></pre>
<p>funktioniert...</p>
<p>Warum?!?</p>
<p>Danke und mfG<br />
Hlymur</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409564</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:07:40 GMT]]></title><description><![CDATA[<p>vllt ist es wichtig zu wissen, dass der Fehler auch geworfen wird, wenn</p>
<pre><code>myString.empty() == true
</code></pre>
<p>ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409565</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:07:40 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:11:54 GMT]]></title><description><![CDATA[<p>Vorerst: Warum nicht</p>
<pre><code>std::string ret( myString.begin(), myString.end() );
</code></pre>
<p>?</p>
<blockquote>
<p>Warum?!?</p>
</blockquote>
<p>Kann nur ein Bug in der Implementierung sein.</p>
<p><strong>Oder</strong> das ist nicht der <em>echte</em> Code. Ist er das? Oder nur eine vereinfachte Version?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409567</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:11:54 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:16:11 GMT]]></title><description><![CDATA[<p>In welche Zeile wird der Fehler denn geworfen?<br />
(Ich habe die Vermutung, dass das gar nicht im gezeigten Code der Fall ist.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409569</guid><dc:creator><![CDATA[corruptedmemory]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:16:11 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:17:08 GMT]]></title><description><![CDATA[<p>Er ist nur in der Hinsicht vereinfacht, dass ret ein wxString ist (wxWidgets),aber da ich hier im reinen c++-Forum bin hab ichs mal schnell auf std::string vereinfacht ( deshalb auch nicht deine Version, da bin ich mir nicht sicher, ob wxString das kann ).</p>
<p>Ein Bug würde mich wundern, Visual Studio 13 hat mich eigentlich noch nie enttäuscht <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/2409570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409570</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:17:08 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:19:15 GMT]]></title><description><![CDATA[<p>corruptedmemory schrieb:</p>
<blockquote>
<p>In welche Zeile wird der Fehler denn geworfen?<br />
(Ich habe die Vermutung, dass das gar nicht im gezeigten Code der Fall ist.)</p>
</blockquote>
<p>Der Fehler wird genau in der for-Schleife geworfen ( hab ich ganz banal mit nem exit davor und danach getestet ^^ )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409571</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:21:17 GMT]]></title><description><![CDATA[<blockquote>
<p>da bin ich mir nicht sicher, ob wxString das kann</p>
</blockquote>
<p>Kann er nicht. <code>wxString</code> hat keinen Iteratorenpaar-Konstruktor.</p>
<p>Kannst du mal den echten Code zeigen? <code>wxString</code> ist keine Spezialisierung eines Templates, daher ist etwas wie <code>wxStringBasic&lt;unsigned char&gt;::iterator</code> nicht Teil deines Codes, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409572</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:25:14 GMT]]></title><description><![CDATA[<p>Der Richtige Code ist nicht viel größer, aber gern ^^</p>
<pre><code>const wxString&amp; Auftrag::SchluesselToString() const
	{
		wxString ret; 
		for( wlz::KeyString::const_iterator it = schluessel.cbegin(); it != schluessel.cend(); it++ )
				ret += (char) *it;
		return ret;
	}
</code></pre>
<p>Achja und wlz::KeyString ist definiert als:</p>
<pre><code>using KeyString = std::basic_string&lt; unsigned char &gt;; //string für den Schlüssel
</code></pre>
<p>Habs getestet, also schluessel ist zum Zeitpunkt des Fehlers leer und der Fehler wird genau bei der for-Schleife geworfen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409574</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:26:44 GMT]]></title><description><![CDATA[<p>Kannst du es nicht debuggen und den Call-Trace anschaun'?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409575</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:26:44 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:33:02 GMT]]></title><description><![CDATA[<p>Hlymur schrieb:</p>
<blockquote>
<pre><code>const wxString&amp; Auftrag::SchluesselToString() const
	{
		wxString ret; 
		for( wlz::KeyString::const_iterator it = schluessel.cbegin(); it != schluessel.cend(); it++ )
				ret += (char) *it;
		return ret;
	}
</code></pre>
</blockquote>
<p>Da ist das Problem, du gibst eine dangling reference zurück: Eine Referenz auf ret, eine lokale Variable.</p>
<p>Fix:</p>
<pre><code class="language-cpp">wxString Auftrag::SchluesselToString() const
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2409579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409579</guid><dc:creator><![CDATA[corruptedmemory]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:33:02 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:39:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Da ist das Problem, du gibst eine dangling reference zurück:</p>
</blockquote>
<p>Nö. Die Exception fliegt (laut seiner Aussage!) bevor das <code>return</code> -Statement überhaupt ausgeführt wird.</p>
<p>Oder wird da irgendwie optimiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409583</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:39:28 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:44:12 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Nö. Die Exception fliegt (laut seiner Aussage!) bevor das <code>return</code> -Statement überhaupt ausgeführt wird.</p>
<p>Oder wird da irgendwie optimiert?</p>
</blockquote>
<p>1. UB ist UB.<br />
2. Vermutlich geht es das erste mal gut (ohne Exception), aber der Stack wird zerschossen. Beim zweiten mal passiert dann halt irgendwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409585</guid><dc:creator><![CDATA[corruptedmemory]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:50:16 GMT]]></title><description><![CDATA[<blockquote>
<p>1. UB ist UB.</p>
</blockquote>
<p>Das ist mir klar. Das Verhalten von Programmen mit voraussehbar undefiniertem Verhalten ist auch vor der Stelle mit diesem nicht mehr definiert. Interessiert hier aber nicht, das wäre nur Theorie.</p>
<blockquote>
<p>2. Vermutlich geht es das erste mal gut (ohne Exception), aber der Stack wird zerschossen.</p>
</blockquote>
<p>Ich <em>vermute</em> er hat eher sowas stehen:</p>
<pre><code>wxString str = auftrag.SchluesselToString();
</code></pre>
<p><s>Dann dürfte aber schon hier alles kollabieren, da der Destruktor des funktionslokalen Objektes aufgerufen wird bevor die Kopie ausgeführt wird.</s><br />
Hmm, ne.</p>
<p>Kann aber auch anders sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409587</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 17:53:32 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>1. UB ist UB.</p>
</blockquote>
<p>Das ist mir klar. Das Verhalten von Programmen mit voraussehbar undefiniertem Verhalten ist auch vor der Stelle mit diesem nicht mehr definiert. Interessiert hier aber nicht, das wäre nur Theorie.</p>
</blockquote>
<p>Dabei vergisst du, dass gerade die Grenzen definierten Verhaltens Grundlage vieler Optimierungen sind. Es ist ja klar: sobald diese Funktion betreten wird, kann undefiniertes Verhalten nur durch das Werfen einer Exception verhindert werden. Vielleicht hat sich also der Compiler entschieden nur diesen Codepfad stehen zu lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409588</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 20 Jul 2014 17:53:32 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 18:01:04 GMT]]></title><description><![CDATA[<p>Also jetzt funktioniert der Code...<br />
Komisch finde ich halt, dass ich genau in der for-Schleife geschmissen wurde und dass der Code mit ausgelagertem Iterator funktioniert...<br />
Aber trotzdem Danke <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/2409592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409592</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Sun, 20 Jul 2014 18:01:04 GMT</pubDate></item><item><title><![CDATA[Reply to wundersame std::length_error-exception on Sun, 20 Jul 2014 22:22:00 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Vielleicht hat sich also der Compiler entschieden nur diesen Codepfad stehen zu lassen?</p>
</blockquote>
<p>Erklärt GCC irgendwo inwiefern er UB in seine Optimierung einbezieht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409637</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 20 Jul 2014 22:22:00 GMT</pubDate></item></channel></rss>