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 时发现了错误。
我正在尝试为 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 时发现了错误。