// 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;
}
這個功能應該獲取的「主題」(匹配topic/[0-9]+
)具體我解析它,在rData
東西發現了一個列表,它幾乎工作。 topics
得到充滿它應該的主題數字。C/C++內存泄漏(使用PCRE)
當我在Visual Studio中調試它時,在函數結束後(返回),我得到了這個錯誤消息:運行時檢查失敗#2 - 變量'regOf'周圍的堆棧已損壞。
我無法弄清楚我做錯了什麼,並想知道是否有人可以指出我正確的方向。
在另一個回答中也提到了這個問題,從那以後消失了,你也應該小心這個衝刺到主題中。由於它只有8個字符長,所以最多可以放入7個字符的字符串,然後纔會溢出緩衝區的末尾。 –
謝謝。它現在完美。 – Savetheinternet