我在qt下撰寫socket
我的設計思路是這樣的:socketserver端,當有一個連接進來時,就new一個QTcpSocket,然后給這個QTcpSocket系結一個readyread()的信號,并且把他放到QList中存起來。當這個socket離開時,就關閉它,并且信號和槽disconnect,同時在QList中把他移除delete掉。當有另外一個連接進來時,也這樣操作。
問題,當第一個連接離開后,第二個連接進來后就報錯了:“free(): invalid size”

uj5u.com熱心網友回復:
首先有個記憶體泄漏:QTcpSocket *currentsocket = new QTcpSocket(); 這句可以去掉,直接將nextPendingConnection的指標給它就可以了,否則new出來的物件沒有被銷毀,而是被新的指標覆寫了地址;報錯的原因可能是由于delete命令導致的,改成socketlist.takeAt(0).deleteLater()試試。
因為本來這個nextPendingConnection出來的物件是由QTcpServer管理的(它生產的,由它銷毀即可),當然socket關閉之后,你也可以呼叫deleteLater來通過Qt機制銷毀,提前釋放記憶體。
uj5u.com熱心網友回復:
ok,學習了。感謝!轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/145751.html
標籤:Qt
