【发布时间】:2015-06-21 01:10:00
【问题描述】:
我无法让 Poco::FIFOBuffer.read() 工作。获取访问冲突错误或变量结果周围的堆栈已损坏。
std::string output;
Poco::FIFOBuffer recvData(BUFFERLEN);
int iResult = mySockets[vect[2]]->receiveBytes(recvData);
char* result = "";
std::cout << recvData.read(result, recvData.size());
output = result;
在程序中的其他地方似乎可以正常工作(vect 是矢量)mySockets 是地图
Poco::FIFOBuffer sendData(BUFFERLEN, false);
sendData.copy(vect[3].c_str(), vect[3].size());
int iResult = mySockets[vect[2]]->sendBytes(sendData);
output = "data sent, sendBytes returned: " + std::to_string(iResult);
参考:http://pocoproject.org/docs-1.5.0/Poco.BasicFIFOBuffer.html#11400
【问题讨论】:
-
char* result = ""; std::cout << recvData.read(result, recvData.size());您正在尝试更改字符串文字的内容。这是未定义的行为。 -
另外,您指向
read函数的链接表明缓冲区已调整大小。对不起,但我看不到该函数如何调整该缓冲区的大小并将这些更改反映给调用者,如果它只传递一个指向缓冲区的指针。要调整缓冲区的大小,您需要对指针的引用或指向指针的指针作为第一个参数。但是,该链接仅显示指向 T 的指针。要么这些文档有误,要么我缺少某些东西。 -
文档是wrong。将在 1.6.1 中修复。
标签: c++ sockets poco-libraries