<?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[Memory Exhausted]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe ein Programm entwickelt, welches die <a href="http://www.boost.org" rel="nofollow">Boost Library</a> benutzt, um reguläre Ausdrücke auszuwerten.</p>
<p>In dem Bereich, in dem der Fehler auftritt, wird aus einem String, der den Quelltext einer HTML Seite enthält, mittels Capturing Tags aus Diesem extrahiert und in einem Vector speichert. Dabei wird ein Iterator erzeugt, mit dem durch alle gefundenen Ergebnisse mittels einer While Schleife iteriert wird:</p>
<pre><code>regex reg (HTTP_REGEX);
    sregex_iterator i( make_regex_iterator(strHTML, reg)),j;
    while(i != j)
    {
        objEntry.id =(*i)[1];
        objEntry.title =(*i)[2];
        vec-&gt;push_back(objEntry);
        i++;
    }
</code></pre>
<p>Der Code funktioniert, weil der Iterator, wenn er erhöht wird und bereits auf das letzte Element zeigt, auf 0 &quot;umgebogen&quot; wird. Deshalb funktioniert der Vergleihc mit dem Iterator j, der mit dem Defaultkonstruktur erzeugt wird.</p>
<p>Prinzipiell funktioniert der Code, jedoch nur in 4 von 5 Fällen.<br />
Wenn es nicht funktioniert, passiert Folgendes:</p>
<p>Die Whileschleife läuft für alle gefundenen Elemente erfolgreich durch. Der Iterator wird erhöht, und ich bekomme die Meldung:</p>
<p>MS VS 2005 EE schrieb:</p>
<blockquote>
<p>Unbehandelte Ausnahme bei 0x75e0b09e in NetTest.exe: Microsoft C++-Ausnahme: std::runtime_error an Speicherposition 0x0012f014..</p>
</blockquote>
<p>Unten, im Debugbereich steht als Inhalt von this &quot;Memory exhausted&quot;.</p>
<p>Ich habe versucht, das ganze zu debuggen, aber leider ist man an einer Stelle der Sourcecode ausgegangen, und ein Assembly zu debuggen - so weitgehend sind meine Kenntnisse dann doch nicht</p>
<p>Habt ihr eine Idee?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196512/memory-exhausted</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 14:15:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196512.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Oct 2007 17:54:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Memory Exhausted on Tue, 30 Oct 2007 17:54:28 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe ein Programm entwickelt, welches die <a href="http://www.boost.org" rel="nofollow">Boost Library</a> benutzt, um reguläre Ausdrücke auszuwerten.</p>
<p>In dem Bereich, in dem der Fehler auftritt, wird aus einem String, der den Quelltext einer HTML Seite enthält, mittels Capturing Tags aus Diesem extrahiert und in einem Vector speichert. Dabei wird ein Iterator erzeugt, mit dem durch alle gefundenen Ergebnisse mittels einer While Schleife iteriert wird:</p>
<pre><code>regex reg (HTTP_REGEX);
    sregex_iterator i( make_regex_iterator(strHTML, reg)),j;
    while(i != j)
    {
        objEntry.id =(*i)[1];
        objEntry.title =(*i)[2];
        vec-&gt;push_back(objEntry);
        i++;
    }
</code></pre>
<p>Der Code funktioniert, weil der Iterator, wenn er erhöht wird und bereits auf das letzte Element zeigt, auf 0 &quot;umgebogen&quot; wird. Deshalb funktioniert der Vergleihc mit dem Iterator j, der mit dem Defaultkonstruktur erzeugt wird.</p>
<p>Prinzipiell funktioniert der Code, jedoch nur in 4 von 5 Fällen.<br />
Wenn es nicht funktioniert, passiert Folgendes:</p>
<p>Die Whileschleife läuft für alle gefundenen Elemente erfolgreich durch. Der Iterator wird erhöht, und ich bekomme die Meldung:</p>
<p>MS VS 2005 EE schrieb:</p>
<blockquote>
<p>Unbehandelte Ausnahme bei 0x75e0b09e in NetTest.exe: Microsoft C++-Ausnahme: std::runtime_error an Speicherposition 0x0012f014..</p>
</blockquote>
<p>Unten, im Debugbereich steht als Inhalt von this &quot;Memory exhausted&quot;.</p>
<p>Ich habe versucht, das ganze zu debuggen, aber leider ist man an einer Stelle der Sourcecode ausgegangen, und ein Assembly zu debuggen - so weitgehend sind meine Kenntnisse dann doch nicht</p>
<p>Habt ihr eine Idee?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394781</guid><dc:creator><![CDATA[thewilli]]></dc:creator><pubDate>Tue, 30 Oct 2007 17:54:28 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 07:20:20 GMT]]></title><description><![CDATA[<p>Hmmm bist du dir sicher, dass der Standartkonstruktor von sregex_iterator einen Iterator erzeugt, der auf das Ende des geparsten Textes zeigt?<br />
Das erscheint mir etwas gewagt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394983</guid><dc:creator><![CDATA[MathiasTemp]]></dc:creator><pubDate>Wed, 31 Oct 2007 07:20:20 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 08:30:20 GMT]]></title><description><![CDATA[<p>Es wird ja eine std::runtime_error-Exception geworfen. Besser kanns doch erstmal nicht laufen, weil es ein kontrolliert verursachter Fehler ist. Warum fängst du sie nicht einfach ab und gibst mit what() das Problem aus? Vielleicht steht da mehr drin?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395003</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 31 Oct 2007 08:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 13:53:10 GMT]]></title><description><![CDATA[<p>ich hoffe ihr könnt mit dem Ergebnis etwas anfangen: <a href="http://img363.imageshack.us/img363/6131/shotwx2.png" rel="nofollow">Screenshot</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395237</guid><dc:creator><![CDATA[thewilli]]></dc:creator><pubDate>Wed, 31 Oct 2007 13:53:10 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 16:23:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Fehler: Ausdruck kann nicht ausgewertet werden</p>
</blockquote>
<p>Klingt für mich irgendwie danach, dass der genutzte Regex falsch formatiert der sonstwie ungültig ist.</p>
<p>Vielleicht kannst du ihn mal zeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395393</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Wed, 31 Oct 2007 16:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 17:52:30 GMT]]></title><description><![CDATA[<p>klar!</p>
<p>\?datid=(.+?)\.xml.+?&gt;(?: |(?:&lt;.+?&gt;))+entry\d{3}(?:&lt;.+?&gt;)((?:[^&lt;])+)</p>
<p>aber es tritt auch nicht immer auf, nur manchmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395457</guid><dc:creator><![CDATA[thewilli]]></dc:creator><pubDate>Wed, 31 Oct 2007 17:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 18:41:47 GMT]]></title><description><![CDATA[<p>Hem, Exhausted heißt &quot;aufgebraucht&quot; oder &quot;erchöpft&quot;. Scheint also eher ein Poblem mit Speicherknappheit zu sein? Und könte es sein, das &quot;Memory Exhausted&quot; in what() drin steht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Wie groß ist denn die HTML-Datei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395504</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 31 Oct 2007 18:41:47 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 21:14:56 GMT]]></title><description><![CDATA[<p>der Fehler tritt aber merkwürdigerweise auch bei etwas kleinereren Dateien auf.. <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="😞"
    /><br />
Merkwürdig ist halt die Stelle, an der das Problem auftritt. Es läuft in jedem Fall für alle gefundenen Ergebnisse durch, und erst, wenn der Iterator erhöht wird, wenn er auf das letzte Element zeigt, und dann auf NULL umgebogen werden soll, also bei der Methode &quot;next&quot;, tritt dieser Fehler auf. Ich bin zwar kein Experte, aber ist es nicht merkwürdig, dass an dieser Stelle ein Speicherproblem auftritt, wenn die speicherintensive Verarbeitung eigentich schon abgeschlossen ist?</p>
<p>Die HTML Seiten sind übrigens ca. 32kb groß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395620</guid><dc:creator><![CDATA[thewilli]]></dc:creator><pubDate>Wed, 31 Oct 2007 21:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 21:37:14 GMT]]></title><description><![CDATA[<p>Ich habe mal in die <a href="http://www.boost.org/libs/regex/doc/regex_iterator.html#o6" rel="nofollow">Doku</a> geschaut:</p>
<blockquote>
<p>Throws: std::runtime_error if the complexity of matching the expression against an N character string begins to exceed O(N2), <strong>or if the program runs out of stack space while matching the expression (if Boost.regex is configured in recursive mode), or if the matcher exhausts it's permitted memory allocation (if Boost.regex is configured in non-recursive mode)</strong>.</p>
</blockquote>
<p>Also anscheinend kann man das konfigurieren und diese Exception ist, wie von mir oben gesagt, ein kontrollierter Fehler.</p>
<p>Hast du durch diese Exception einen Nachteil? Also stimmt dann das Ergebnis nicht?<br />
Fang die Exception ab und und dann beendet sich halt die while-Schleife. Eine Exception kann schliesslich auch als Abbruchbedingung herhalten. Kann, muß nicht...</p>
<p>Ansonst kannst du versuchen die <a href="http://www.boost.org/libs/regex/doc/configuration.html" rel="nofollow">Konfig</a> von Boost.regex in den recursive mode umstellen zu versuchen und auf Besserung hoffen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395624</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 31 Oct 2007 21:37:14 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Wed, 31 Oct 2007 21:47:47 GMT]]></title><description><![CDATA[<p>der recursive mode hat leider keine veränderung gebracht..</p>
<p>klar kann ich die exception nutzen, aber irgendwie sträuben sich mir da die nackenhaare <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> würde halt shcon gerne wissen, warum es manchmal auch so funktioniert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395636</guid><dc:creator><![CDATA[thewilli]]></dc:creator><pubDate>Wed, 31 Oct 2007 21:47:47 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Thu, 01 Nov 2007 06:45:43 GMT]]></title><description><![CDATA[<p>&quot;.+?&quot; irgendein zeichen, mindestens einmal oder auch gar nicht? ich schätz mal deine regexp sorgt dafür, dass die match-tiefe ins bodenlose wächst und nach was weiss ich, vielleicht 1 mio. versuchen, steigt die lib aus.<br />
würd die regexp ein bisschen optimieren und trimmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395713</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Thu, 01 Nov 2007 06:45:43 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Exhausted on Thu, 01 Nov 2007 10:35:47 GMT]]></title><description><![CDATA[<p>na ja, eigentlich macht das &quot;?&quot; das Plus lazy, weswegen der Term eigentlich nicht ins Bodenlose laufen sollte. Tut er ja in 80% der Fälle auch nicht. Und selbst bei den Fällen, wo das Programm abbricht, wurden vorher korrekt (und in minimaler Zeit) alle Capturings ausgegeben.</p>
<p>Was würdest du denn vorschlagen bezüglich des Terms?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395783</guid><dc:creator><![CDATA[thewilli]]></dc:creator><pubDate>Thu, 01 Nov 2007 10:35:47 GMT</pubDate></item></channel></rss>