解决方案 »

  1.   

    你这个m_pStatusList是什么类型呢?是CStringList吗?如果是,那就用错了。因为你加入list的是指针啊。所以ASSERT_VALID(this)会检测到错误。
      

  2.   

    你或许应该用CPtrList,或者自己重新定义
    typedef CList<DATA*,DATA*> CNodeList;
      

  3.   

    你使用的类型是否为CStringList
      

  4.   

            UINT m_nMaxAttempts;    //试图连接次数的最大值  
    BOOL m_bSinglePort;   //是否只扫描单个端口  
    UINT m_minPort,m_maxPort; //扫描端口的范围  
    UINT m_nCounter;    //端口的个数   
    CStringList* m_pColumns; //列表框标题栏  
    CPtrList* m_pStatusList;//保存扫描结果的链表
    这是头文件里定义的变量,是CPtrList的
      

  5.   

    CPtrList* m_pStatusList
    是CPtrList的,我的这个的源码就是在网上找的
      

  6.   

    我这个代码是网上找的
    源码:http://wenku.baidu.com/link?url=qW-xQazlJzJblC7Dk41GLFK0wXCV0C2mLf22iUle_mrFKeFG2NsVnMgknfZ2hDDj9DX-UbtNAFTEFYB9_gxkF2axpsGWN7UlRGBAa4Vv1g7
    源码在Dlg.h里有#include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <io.h>  #include <afxsock.h>
    这几个头文件,我把 #include <sys/types.h> #include <sys/stat.h>换成了#include <winsock.h>
    #pragma comment(lib, "ws2_32.lib")
    不知道会不会是这个原因(我是windows系统)
      

  7.   

    m_pColumns初始化的代码看看,比如 new CStringList ,SetSize 的地方
      

  8.   

    CStringList* m_pColumns; //列表框标题栏 
    是这样定义的,然后就在//显示列表框标题栏
    void CMyscanDlg::ShowHeaders()
    {
    int nIndex=0;   
    POSITION pos=m_pColumns->GetHeadPosition();  
    while(pos)  
    {   
    CString hdr=(CString)m_pColumns->GetNext(pos);   
    AddColumn(hdr,0,nIndex++,LVCF_SUBITEM,LVCFMT_CENTER);   
    }
    }
      

  9.   

    CStringList* m_pColumns; //列表框标题栏 
    是这样定义的,然后就在//显示列表框标题栏
    void CMyscanDlg::ShowHeaders()
    {
    int nIndex=0;   
    POSITION pos=m_pColumns->GetHeadPosition();  
    while(pos)  
    {   
    CString hdr=(CString)m_pColumns->GetNext(pos);   
    AddColumn(hdr,0,nIndex++,LVCF_SUBITEM,LVCFMT_CENTER);   
    }
    }m_pColumns = ?
      

  10.   

    m_pColumns是个指针,你没new吧。
    源程序在CMyDlg的构造函数中进行了new的
      

  11.   

    QAQ果然是这个原因
    万分感谢