// 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;
}
この機能は、私がrData
で、それを解析し、それはほとんど動作することを具体的な何かで見られる(topic/[0-9]+
に一致する)「トピック」のリストを取得することになっています。 topics
は、それが想定しているトピック番号で満たされます。C/C++メモリリーク(PCREを使用)
私はVisual Studioでデバッグすると、関数の最後(戻り)の直後にこのエラーメッセージが表示されます。ランタイムチェック失敗#2 - 変数 'regOf'の周りのスタックが壊れていました。
私が間違っていることを理解できず、誰かが正しい方向で私を指し示すことができるかどうか疑問に思います。
それはまた、あなたがトピックにスプリントを行うことについても注意する必要があることが消えて以来、別の答えで言及されました。 8文字しかないので、バッファの最後がオーバーフローする前に最大7文字の文字列を入力することができます。 –
ありがとうございます。それは今、完璧に動作します。 – Savetheinternet