QHostAddress的分段错误

时间:2015-03-27 09:18:32

标签: c++ qt reference segmentation-fault

我试图为QUdpSocket创建一个包装器类;它应该只将数据报发送到一个端点。所以,当然,我将目标地址和端口传递给构造函数并保存以供以后使用:

class Wrapper
{

public:

    Wrapper(const QHostAddress & destinationAddress, quint16 destinationPort) :
        destAddress(destinationAddress),
        destPort(destinationPort)
    {}

    void sendData(char * data, uint32_t size)
    {
        udpSocket.writeDatagram(data, size, destAddress, destPort);
    }

    QUdpSocket udpSocket;

    const QHostAddress & destAddress;
    quint16 destPort;    

};

它编译得很好,但是,当我调用sendData时会出现分段错误。在调试器中,我只能看到destAddress是"优化了引用"。如果我只是把一个实际地址放在那里一切正常。所以看起来destAddress是某种空引用。

但是没有null引用这样的东西,是吗?那么发生了什么?我显然遗漏了一些东西。

1 个答案:

答案 0 :(得分:1)

只需将const QHostAddress &destAddress更改为课程内的QHostAddress destAddress即可。声明,它会没问题。

参考不是真正的变量。除了"语法糖",它只是指针内部。就像普通指针一样,它需要"主机"变量存在。您可能已经破坏了ct的参数,因此在取消引用存储的参考时发现了错误。