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

时间:2015-01-22 12:51:40

标签: c++ function sockets

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

1 个答案:

答案 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);
}