套接字读取()进入一个函数,在 C++ 中 returns 指针
Socket read()ing into a function that returns pointer in C++
我有一个叫 message
的 class。在这里你可以找到相关的代码:
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()
,其中 returns 指向文本的指针。然后,我读入了这个函数。我知道,这是错误的。谁能告诉我为什么?
read(receive_socket,m.getText(), header.dataSize);
谁负责维护这些数据?我看到 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);
}
我有一个叫 message
的 class。在这里你可以找到相关的代码:
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()
,其中 returns 指向文本的指针。然后,我读入了这个函数。我知道,这是错误的。谁能告诉我为什么?
read(receive_socket,m.getText(), header.dataSize);
谁负责维护这些数据?我看到 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);
}