<?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[Programmzeile führt zu unerklärlichem Absturz.]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe versucht einen eigenen Iterator zu schreiben. Hier der Code dazu:</p>
<pre><code class="language-cpp">class myClass : public iterator&lt;input_iterator_tag,string&gt;,
    private boost::equality_comparable&lt;myClass&gt;,
    private boost::incrementable&lt;myClass&gt;
{
private:
    unsigned int m_counter;
    vector&lt;string&gt; m_vector;
    string m_text;

public:
    myClass(int i) : m_counter(i) { }

    myClass(const vector&lt;string&gt;&amp; v) :
        m_counter(0),
        m_vector(v)
    {
        srand ( time(NULL) );
        m_text = m_vector.at(0);
    }

    string operator*() const
    {
        return m_text; // Nach Aufruf dieser Funktion stürzt das Programm ab.
    }

    myClass&amp; operator++()
    {
        string str = m_text.substr(m_text.length() - 2); // Wenn diese Zuweisung ausgeklammert wird, tritt der Fehler nicht auf.
        int pos = rand()%m_vector.size();
        m_text = m_vector.at(pos).substr(2);
        m_counter++;
        return *this;
    }

    bool operator==(myClass const &amp;other) const
    {
        return this-&gt;m_counter &gt;= other.m_counter;
    }
};
</code></pre>
<p>Wenn ich die markierte Programmzeile nicht ausklammere und versuche den Iterator zu benutzen, bekomme ich immer einen Absturz des Programmes mit exit code 255. Laut Google steht das für &quot;The extended attributes are inconsistent.&quot; Am Anfang lieferte mir der Debugger noch eine Meldung das ich auf geschützen Speicher zugreife, irgendwann kam die aber dann nicht mehr und das Programm stürzte ohne eine weitere Meldung ab.<br />
Wenn ich nicht einen Substring sondern die ganze Variable m_text zuweise, bekomme ich auch keinen Absturz.<br />
Hier noch die Implementation, wie ich den Iterator anwende:</p>
<pre><code class="language-cpp">// ...
    vector&lt;string&gt; v;
    // ...
    myClass anfang(v);
    myClass ende(100);
    copy(anfang, ende, ostream_iterator&lt;string&gt;(cout, &quot;\n&quot;));
    // ...
</code></pre>
<p>Ich kann mir absolut nicht erklären, wie es zu diesem Fehler kommen kann. Ich hoffe, ihr könnt mir da weiterhelfen.</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218288/programmzeile-führt-zu-unerklärlichem-absturz</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 13:21:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218288.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Jul 2008 15:01:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmzeile führt zu unerklärlichem Absturz. on Fri, 18 Jul 2008 15:01:14 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe versucht einen eigenen Iterator zu schreiben. Hier der Code dazu:</p>
<pre><code class="language-cpp">class myClass : public iterator&lt;input_iterator_tag,string&gt;,
    private boost::equality_comparable&lt;myClass&gt;,
    private boost::incrementable&lt;myClass&gt;
{
private:
    unsigned int m_counter;
    vector&lt;string&gt; m_vector;
    string m_text;

public:
    myClass(int i) : m_counter(i) { }

    myClass(const vector&lt;string&gt;&amp; v) :
        m_counter(0),
        m_vector(v)
    {
        srand ( time(NULL) );
        m_text = m_vector.at(0);
    }

    string operator*() const
    {
        return m_text; // Nach Aufruf dieser Funktion stürzt das Programm ab.
    }

    myClass&amp; operator++()
    {
        string str = m_text.substr(m_text.length() - 2); // Wenn diese Zuweisung ausgeklammert wird, tritt der Fehler nicht auf.
        int pos = rand()%m_vector.size();
        m_text = m_vector.at(pos).substr(2);
        m_counter++;
        return *this;
    }

    bool operator==(myClass const &amp;other) const
    {
        return this-&gt;m_counter &gt;= other.m_counter;
    }
};
</code></pre>
<p>Wenn ich die markierte Programmzeile nicht ausklammere und versuche den Iterator zu benutzen, bekomme ich immer einen Absturz des Programmes mit exit code 255. Laut Google steht das für &quot;The extended attributes are inconsistent.&quot; Am Anfang lieferte mir der Debugger noch eine Meldung das ich auf geschützen Speicher zugreife, irgendwann kam die aber dann nicht mehr und das Programm stürzte ohne eine weitere Meldung ab.<br />
Wenn ich nicht einen Substring sondern die ganze Variable m_text zuweise, bekomme ich auch keinen Absturz.<br />
Hier noch die Implementation, wie ich den Iterator anwende:</p>
<pre><code class="language-cpp">// ...
    vector&lt;string&gt; v;
    // ...
    myClass anfang(v);
    myClass ende(100);
    copy(anfang, ende, ostream_iterator&lt;string&gt;(cout, &quot;\n&quot;));
    // ...
</code></pre>
<p>Ich kann mir absolut nicht erklären, wie es zu diesem Fehler kommen kann. Ich hoffe, ihr könnt mir da weiterhelfen.</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549461</guid><dc:creator><![CDATA[Schamaz]]></dc:creator><pubDate>Fri, 18 Jul 2008 15:01:14 GMT</pubDate></item><item><title><![CDATA[Reply to Programmzeile führt zu unerklärlichem Absturz. on Fri, 18 Jul 2008 15:43:47 GMT]]></title><description><![CDATA[<p>Vermutlich crasht es wenn m_text.length() &lt; 2 wird, und der Ausdruch daher &quot;unterläuft&quot;.</p>
<p>Dann übergibst du ~~4 milliarden an substr(), und wenn die substr() Implementierung keine Parameter validiert knallt es eben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549485</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 18 Jul 2008 15:43:47 GMT</pubDate></item></channel></rss>