套接字读取()到一个在C++中返回指针的函数中

Socket read()ing into a function that returns pointer in C++

本文关键字:函数 返回 指针 C++ 一个 读取 套接字      更新时间:2023-10-16

我有一个名为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);

谁负责维护这些数据?我看到一个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);
}