<?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[Warum SegFault]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgender kleiner Beispielcode</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
    std::map&lt;int, std::vector&lt;std::string&gt; &gt; mp;

    for(int i = 0; i &lt; 10; ++i)
    {
        std::vector&lt;std::string&gt; vc;
        vc.push_back(&quot;A&quot;);
        vc.push_back(&quot;B&quot;);
        vc.push_back(&quot;C&quot;);
        vc.push_back(&quot;D&quot;);
        vc.push_back(&quot;E&quot;);

        mp[i] = vc;
    }

    for(std::map&lt;int, std::vector&lt;std::string&gt; &gt;::iterator iter = mp.end(); iter != mp.begin(); --iter)
    {
        for(std::vector&lt;std::string&gt;::iterator iter2 = iter-&gt;second.begin(); iter2 != iter-&gt;second.end(); ++iter2)
        {
            if(*iter2 == &quot;C&quot;)
            {
                std::cout &lt;&lt; *iter2 &lt;&lt; std::endl;
                break;
            }
        }
    }

    return 0;
}
</code></pre>
<p>Ich weiß, dass dieser Code nichts sinnvolles macht. Ich denke jedoch, dass er korrekt ist. Allerdings führt er - unter Windows mit Codeblocks immer und unter Ubuntu 9.04 manchmal(?) - zu einem Segmentation Fault in Zeile 26. Wo ist da der Denkfehler?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241914/warum-segfault</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 06:13:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241914.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 May 2009 14:49:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum SegFault on Wed, 27 May 2009 14:49:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgender kleiner Beispielcode</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
    std::map&lt;int, std::vector&lt;std::string&gt; &gt; mp;

    for(int i = 0; i &lt; 10; ++i)
    {
        std::vector&lt;std::string&gt; vc;
        vc.push_back(&quot;A&quot;);
        vc.push_back(&quot;B&quot;);
        vc.push_back(&quot;C&quot;);
        vc.push_back(&quot;D&quot;);
        vc.push_back(&quot;E&quot;);

        mp[i] = vc;
    }

    for(std::map&lt;int, std::vector&lt;std::string&gt; &gt;::iterator iter = mp.end(); iter != mp.begin(); --iter)
    {
        for(std::vector&lt;std::string&gt;::iterator iter2 = iter-&gt;second.begin(); iter2 != iter-&gt;second.end(); ++iter2)
        {
            if(*iter2 == &quot;C&quot;)
            {
                std::cout &lt;&lt; *iter2 &lt;&lt; std::endl;
                break;
            }
        }
    }

    return 0;
}
</code></pre>
<p>Ich weiß, dass dieser Code nichts sinnvolles macht. Ich denke jedoch, dass er korrekt ist. Allerdings führt er - unter Windows mit Codeblocks immer und unter Ubuntu 9.04 manchmal(?) - zu einem Segmentation Fault in Zeile 26. Wo ist da der Denkfehler?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716788</guid><dc:creator><![CDATA[basti33]]></dc:creator><pubDate>Wed, 27 May 2009 14:49:41 GMT</pubDate></item><item><title><![CDATA[Reply to Warum SegFault on Wed, 27 May 2009 14:56:43 GMT]]></title><description><![CDATA[<p>reverse_iterator und rend und rbegin sind ein paar stichworte.</p>
<p>denn end() liefert einen ungültigen iterator</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716789</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 27 May 2009 14:56:43 GMT</pubDate></item><item><title><![CDATA[Reply to Warum SegFault on Wed, 27 May 2009 14:59:42 GMT]]></title><description><![CDATA[<p>Danke für die Antwort. Aber wieso funktioniert es denn dann manchmal trotzdem? In einem anderen Anwendungsfall, in dem ich allerdings auch durch die map von Hinten iteriere, habe ich unter Ubuntu nie Probleme und unter XP funktioniert es manchmal und manchmal nicht. Zufall?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716790</guid><dc:creator><![CDATA[basti33]]></dc:creator><pubDate>Wed, 27 May 2009 14:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to Warum SegFault on Wed, 27 May 2009 15:02:03 GMT]]></title><description><![CDATA[<p>mp.end() liefert dir nicht einen Iterator, welcher auf das letzte Element verweist, sondern auf das Element hinter dem letzten. Der Iterator, welcher von mp.end() zurückgeliefert wird, darf man auf gar keinen Fall dereferenzieren.</p>
<p>Was du suchst sind Reverse Iteratoren. Die bekommt man über rbegin und rend. Das ganze sieht dann zum Beispiel so aus:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

int main()
{
  std::vector&lt;char&gt; vec;

  vec.push_back('h');
  vec.push_back('e');
  vec.push_back('l');
  vec.push_back('l');
  vec.push_back('o');

  std::vector&lt;char&gt;::reverse_iterator iter = vec.rbegin();
  std::vector&lt;char&gt;::reverse_iterator end = vec.rend();

  for(; iter != end; ++iter) // man bemerke, hier wird inkrementiert
  {
    std::cout &lt;&lt; *iter;
  }

  return 0;
}
</code></pre>
<p>Referenzen,<br />
reverse_iterator:<br />
<a href="http://www.cplusplus.com/reference/std/iterator/reverse_iterator/" rel="nofollow">http://www.cplusplus.com/reference/std/iterator/reverse_iterator/</a></p>
<p>Standardbibliothek Container:<br />
<a href="http://www.cplusplus.com/reference/stl/" rel="nofollow">http://www.cplusplus.com/reference/stl/</a></p>
<p>Zum Beispiel <code>std::map::rbegin</code> und <code>std::map::rend</code> :<br />
<a href="http://www.cplusplus.com/reference/stl/map/rbegin/" rel="nofollow">http://www.cplusplus.com/reference/stl/map/rbegin/</a><br />
<a href="http://www.cplusplus.com/reference/stl/map/rend/" rel="nofollow">http://www.cplusplus.com/reference/stl/map/rend/</a></p>
<p>(In der Vorschau gesehen, etwas zu spät, aber noch zur anderen Frage)<br />
Es ist undefiniertes Verhalten -&gt; Es kann alles passieren</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716791</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 27 May 2009 15:02:03 GMT</pubDate></item><item><title><![CDATA[Reply to Warum SegFault on Wed, 27 May 2009 15:44:15 GMT]]></title><description><![CDATA[<p>basti33 schrieb:</p>
<blockquote>
<p>Danke für die Antwort. Aber wieso funktioniert es denn dann manchmal trotzdem? In einem anderen Anwendungsfall, in dem ich allerdings auch durch die map von Hinten iteriere, habe ich unter Ubuntu nie Probleme und unter XP funktioniert es manchmal und manchmal nicht. Zufall?</p>
</blockquote>
<p>Das ist die Essenz des Wörtchens &quot;undefiniertes Verhalten&quot;. Undefiniert heißt eben es kann alles passieren, wenn der Compiler (und die Implementatoren der Bibliothek) wollen können sie bei undefiniertem Verhalten eine Exception schmeißen oder einfach gucken was passiert (wie in deinem Fall) oder deine Festplatte plattbügeln, dir einen Strauß Rosen schicken, anfangen Rätselspiele zu treiben was du wohl eigentlich tun wolltest usw...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716811</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 27 May 2009 15:44:15 GMT</pubDate></item></channel></rss>