您好,请教一个问题createsocket 创建后,关闭程序时需要释放么
downloadproject opened this issue · 8 comments
QWeakPointer<MainWindow> weakSelf = QWeakPointer<MainWindow>(sharedFromThis());
sockRecv = Socket::createSocket();//创建一个UDP数据接收端口
sockSend = Socket::createSocket();//创建一个UDP数据发送端口
sockRecv->bindUdpSock(9001);//接收UDP绑定9001端口
sockSend->bindUdpSock(0, "0.0.0.0");//发送UDP随机端口
sockRecv->setOnRead([weakSelf](const Buffer::Ptr &buf, struct sockaddr *addr , int){
//接收到数据回调
// DebugL << "recv data form " << getIP(addr) << ":" << buf->data();
auto strongSelf = weakSelf.lock();
if(!strongSelf) {
return ;
}
strongSelf->handleOneRtp((uint8_t *) buf->data(), buf->size());
});
我创建了以后,关闭程序的时候会报如下错误,
the inferior stopped because it received a signal from operating system
Signal name :SIGSEGV
你这个代码看起来没什么问题
您好,我用qt6,整个工程就写了一条语句Socket::Ptr sockRecv = Socket::createSocket();//创建一个UDP数据接收端口,在调试状态关闭程序,程序会崩溃,恳请指教,谢谢!
可以看下栈信息.
实在不好意思,打扰了,我调试您的test_tcpClient时,注释了最后的semaphore几条语句 ,在debug下,程序会报错,恳请指教!谢谢!
int main() {
// 设置日志系统
Logger::Instance().add(std::make_shared());
Logger::Instance().setWriter(std::make_shared());
TestClient::Ptr client(new TestClient());//必须使用智能指针
client->startConnect("127.0.0.1",9000);//连接服务器
TcpClientWithSSL<TestClient>::Ptr clientSSL(new TcpClientWithSSL<TestClient>());//必须使用智能指针
clientSSL->startConnect("127.0.0.1",9001);//连接服务器
//退出程序事件处理
//static semaphore sem;
// signal(SIGINT, { sem.post(); });// 设置退出信号
//sem.wait();
return 0;
}
您好,调试test_udpSock时,我将while(!exitProgram) 改成 if(!exitProgram) 在debug下,程序也会崩溃。
the inferior stopped because it received a signal from operating system
Signal name :SIGSEGV
不好意思,能帮我看下么?谢谢!!
您好,调试test_udpSock时,我将while(!exitProgram) 改成 if(!exitProgram) 在debug下,程序也会崩溃。
the inferior stopped because it received a signal from operating system
Signal name :SIGSEGV
这个测试也没能复现。你可以用 gdb 调试下看看。
好的,谢谢!