// Returns a list of topic numbers found on the page
vector<string> findTopics(char* rData, int rDataLen) {
pcre *re;
const char *error;
int erroffset;
re = pcre_compile(
"topic/([0-9]+)", /* the pattern */
0, /* default options */
&error, /* for error message */
&erroffset, /* for error offset */
NULL); /* use default character tables */
if(re == NULL) {
printf("Couldn't compile regex (%s)", error);
// exit(-1):
}
int regOf[2];
vector<string> topics;
char *topic;
int offset = 0;
int rc = 1;
// Basically a preg_match_all()
while(true) {
rc = pcre_exec(re, NULL, rData, rDataLen, offset, 0, regOf, sizeof(regOf));
if (rc < 2) {
break;
}
topic = new char[8];
sprintf(topic, "%.*s\n", regOf[2*1+1] - regOf[2*1], rData + regOf[2*1]);
topics.push_back(topic);
offset = regOf[1];
}
pcre_free(re);
return topics;
}
Diese Funktion soll eine Liste von „Themen“ (passend topic/[0-9]+
) in etwas gefunden holen spezifisch, dass ich es analysieren, in der rData
, und es funktioniert fast. topics
wird mit dem Thema Zahlen gefüllt, die es soll.C/C++ Speicherverlust (mit PCRE)
Wenn ich es in Visual Studio debuggen, bekomme ich diese Fehlermeldung direkt nach dem Ende der Funktion (die Rückkehr): Run-Time Check Failure # 2 - Stack um die Variable 'regOf' wurde beschädigt.
Ich kann nicht herausfinden, was ich falsch mache, und frage mich, ob vielleicht jemand mir in die richtige Richtung zeigen kann.
Es wurde auch in einer anderen Antwort erwähnt, die seitdem verschwunden ist, dass Sie auch vorsichtig sein sollten, diesen Sprint zum Thema zu machen. Da es nur 8 Zeichen lang ist, können Sie höchstens eine 7-stellige Zeichenfolge einfügen, bevor das Ende des Puffers überläuft. –
Vielen Dank. Es funktioniert jetzt perfekt. – Savetheinternet