QHostAddress 的分段错误

Segmentation fault with QHostAddress

我正在尝试为 QUdpSocket 制作包装器 class;它应该只将数据报发送到一个端点。因此,很自然地,我将目标地址和端口传递给构造函数并将其保存以备后用:

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 是 "optimized out reference"。如果我只是在那里放一个实际地址,一切正常。所以看起来 destAddress 是某种空引用。

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

只需在class'声明中将const QHostAddress &destAddress更改为QHostAddress destAddress即可。

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