【发布时间】:2010-07-02 13:43:27
【问题描述】:
通过将 java 程序转换为 c++ 来学习 C++ 的新手。以下代码在执行时会导致分段错误 (SIGSEGV)。
//add web page reference to pages queue (STL)
void CrawlerQueue::addWebPage(WebPage & webpage) {
pagesBuffer.push(webpage);
}
//remove and return web page reference from pages queue
WebPage & CrawlerQueue::getWebPage() {
if (pagesBuffer.size() > 0) {
WebPage & page = pagesBuffer.front();
pagesBuffer.pop();
return page;
} else
throw "Web pages queue is empty!";
}
//code that results in segmentation fault when called
void PageParser::extractLinks(){
try {
WebPage & page = crawlerqueue.getWebPage();
}catch (const char * error) {
return;
}
}
对上述代码修复分段错误问题的更改被突出显示(
//return a const WebPage object instead of a WebPage reference
const WebPage CrawlerQueue::getWebPage() { <====
if (pagesBuffer.size() > 0) {
WebPage page = pagesBuffer.front(); <====
pagesBuffer.pop();
return page;
} else
throw "Web pages queue is empty!";
}
//no segmentation fault thrown with modifications
void PageParser::extractLinks(){
try {
WebPage page = crawlerqueue.getWebPage(); <====
}catch (const char * error) {
return;
}
}
什么给了?我仍在尝试理解引用和指针
【问题讨论】:
-
感谢所有答案和 cmets。我现在明白了。
标签: c++ stl segmentation-fault queue