以下是代码中的一段,它假设测试与服务器的通信并从中获取图片:
bool testPICcomm(){
Poco::Logger &logger = Poco::Logger::get("PictureTester");
logger.setLevel(Poco::Message::PRIO_DEBUG);
HttpClient* h = new HttpClient(host, 80);
std::map<std::string, std::string> headers;
Poco::UTF8Encoding utf;
Encoder encoder(utf);
h->connect();
h->sendHttpRequest(askForPic,"","",0,0);
if((h->getHttpHeaders(headers, encoder)) == false)
{
logger.debug("Couldn't Retrieve Headers "+ false);
h->close();
return false;
}
logger.debug("got headers");
//get head data
std::string mime = headers["Content-Type"];
logger.debug("mime type:" + mime);
logger.debug("length string: " + std::string((headers["Content-Length"]).c_str()));
int length= atoi((headers["Content-Length"]).c_str());
logger.debug("pic length:" + length);
...
Run Code Online (Sandbox Code Playgroud)
我在linux上使用eclipse(eclipse功能不太好,所以我只在控制台上工作).
现在通过跟踪记录器消息,我推断出atoi(查看代码的结尾)会导致分段错误.
考虑到另一个函数testXMLcomm工作正常并且它看起来很相似,这真的很奇怪.
我包括stdio和stdlib ofcourse.
请帮忙!!!
我预计崩溃就行了logger.debug("pic length:" + length);.你已经length为一个指向字符串的文字添加了一个整数偏移量,并在无人区域中提出了一个地址.
你可能想写一些类似的东西:
ostringstream ss("pic length: ");
ss << length;
logger.debug(ss.str());
Run Code Online (Sandbox Code Playgroud)
或者logger.debug("pic length: " + boost::lexical_cast<string>(length));,或者C++ 11 std::to_string(length).