当前位置: 代码迷 >> QT开发 >> 开释一个继承于QTcpSocket的类内存失败
  详细解决方案

开释一个继承于QTcpSocket的类内存失败

热度:51   发布时间:2016-04-25 03:48:21.0
释放一个继承于QTcpSocket的类内存失败
client_socket类声明 

class client_socket:public QTcpSocket
{
    Q_OBJECT
public:
    explicit client_socket();
    virtual ~client_socket(){}
signals:
 void socket_disconnect(int socket_id);
private :
       QString socket_ip;
       int blocksize;
       int socket_id;
};
//QList<client_socket*> socket_list;
服务器里面将发起连接的客户端socket加入socket_list
void server::incomingConnection(int handle)
{
    qDebug()<<"client_menu"<<handle;
    client_socket *socket = new client_socket();
    socket_list.append(socket);
    socket->init_socket(handle);
    socket->setObjectName(QString::number(handle,10));
    connect(socket,SIGNAL(socket_disconnect(int)),this,SLOT(del_connect(int)));
}

//在执行删除连接时释放类存总是失败???
void server::del_connect(int socket_id)
{
    qDebug()<<"dellete client connect!"<<socket_id<<socket_list.count();

    foreach(client_socket *m_socket,socket_list)
    {
        if(m_socket->objectName() == QString::number(socket_id,10))
        {
            socket_list.removeOne(m_socket);
             m_socket->close();
             qDebug()<<"address1"<<m_socket;
             delete m_socket;//释放内存失败?????

        }
    }
}

报错:
ASSERT: "d" in file ..\..\include/QtCore/../../src/corelib/tools/qscopedpointer.h, line 112
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.


有人能解释下吗???
socket 内存