我有一个名为message
的班级。在这里你可以找到相关的代码:
class message
{
private:
HeaderType header;
// Message text
byte * text;
public:
~message();
byte * getText();
...};
/*
* Destructor
*/
message::~message(){
if (header.ack == false) free (text);
}
/*
* getText
*
* Returns pointer to text
*/
byte * message::getText(){
return text;
}
我需要直接阅读text
。所以,我创建了上面的函数message::getText()
,它返回指向文本的指针。然后,我读到了这个功能。我知道,这是错的。有人可以告诉我为什么吗?
read(receive_socket,m.getText(), header.dataSize);
答案 0 :(得分:1)
谁负责维护这些数据?我看到free
(应该是delete[]
)但我在任何地方都看不到new
。你刚刚返回一个未初始化的指针吗?
这是vector
的一个很好的用例:
class message
{
private:
HeaderType header;
// Message text
std::vector<char> text;
};
std::vector<char>& message::getText() { return text; }
如果您只是将套接字描述符传递到message
,那么它会更好一些,这样它就可以执行read
:
int read(int sd) {
text.resize(header.dataSize);
return ::read(sd, &text[0], header.dataSize);
}