CList<POST_INFO*, POST_INFO*>   m_PostList;if (m_PostList.GetCount() == 0)
return;
// 删除post列表
POSITION pos = m_PostList.GetHeadPosition();while (pos != NULL) {
delete m_PostList.GetNext(pos);
}
这样写对吗,为什么程序再次使用链表后都是乱码?

解决方案 »

  1.   

    你只是释放了链表中每个对象的内存,并没有清空链表。应该加上:
    m_PostList.RemoveAll();//<清空列表,移除所有的元素,但不释放元素的内存
      

  2.   

    同意楼上,m_PostList.RemoveAll();是清除链表的内容,即POST_INFO*指针,delete m_PostList.GetNext(pos);是释放POST_INFO*指针所指向地址空间的内容。你的代码释放了地址空间的内容,却在链表中依然保存着这些指针,这些指针所指向的地址空间已被释放,所以会显示乱码
      

  3.   

    使用的POST_INFO*不能调用RemoveAll
    其实我只想实现能动态的从服务器更新链表,有什么好办法吗?
      

  4.   

    想了想还是用这个解决吧,非常感谢2,3楼提供的思路
    if (m_PostList.GetCount() == 0)
    return;
    // 删除post列表
    POSITION pos = m_PostList.GetHeadPosition(); while (pos != NULL) {
    POSITION t=pos;
    POST_INFO* pTemp = m_PostList.GetNext(pos);
    m_PostList.RemoveAt(t);
    delete pTemp;
    }

    // 清除组合框内容
    CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_POSTLIST_COMBO);
    pCombo->ResetContent();