000
30.10.2007, 15:36 Uhr
embedded
|
Hi!
Ich habe ein Programm entwickelt, welches die Boost Library benutzt, um reguläre Ausdrücke auszuwerten.
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:
C++: |
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->push_back(objEntry); i++; }
|
Der Code funktioniert, weil der Iterator, wenn er erhöht wird und bereits auf das letzte Element zeigt, auf 0 "umgebogen" wird. Deshalb funktioniert der Vergleihc mit dem Iterator j, der mit dem Defaultkonstruktur erzeugt wird.
Prinzipiell funktioniert der Code, jedoch nur in 4 von 5 Fällen. Wenn es nicht funktioniert, passiert Folgendes:
Die Whileschleife läuft für alle gefundenen Elemente erfolgreich durch. Der Iterator wird erhöht, und ich bekomme die Meldung:
Zitat: |
Unbehandelte Ausnahme bei 0x75e0b09e in NetTest.exe: Microsoft C++-Ausnahme: std::runtime_error an Speicherposition 0x0012f014..
|
Unten, im Debugbereich steht als Inhalt von this "Memory exhausted".
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
Habt ihr eine Idee?
Vielen Dank im Voraus! Dieser Post wurde am 30.10.2007 um 15:37 Uhr von embedded editiert. |