我定义了一个类:
class CContact  
{private:
typedef struct contact_tag
{
UINT id;
LPTSTR content;
int len;
struct contact_tag* next;
}contact;//联系方式结点结构
contact *head;//表头
contact *rear;//表尾
int listLen;//有几个节点
LONG byteLen;//总的文件大小
public:
void PushDataToCombo(UINT id,CComboBox *cmb);
BOOL LoadContactFromVariant(_variant_t *var,BOOL clear);//从_variant_t中加载联系方式
void MakeVariant(VARIANT *var);
BOOL AddContactItem(UINT Item,LPTSTR content);
CContact();
virtual ~CContact();
protected:
void ClearContact();//清空
};
出问题的是BOOL LoadContactFromVariant(_variant_t *var,BOOL clear)方法,代码为:
BOOL CContact::LoadContactFromVariant(_variant_t *var,BOOL clear)
{
//var是_variant_t的指针,通过它来得到数据
//clear是询问是否清除原来的记录
//检查指针是否合法
if(!var || ((VT_UI1 | VT_ARRAY)!=var->vt))
return FALSE; CHAR *pos=NULL;//用来访问var的SAFEARRAY //将pos指向可访问内存
HRESULT hr=SafeArrayAccessData(var->parray,(void **)&pos);
ASSERT(SUCCEEDED(hr) && pos); //得到记录数量
UINT num=*(UINT*)pos;
if(!num)
return FALSE;

//是否清除原来记录
// if(clear)
// ClearContact();//调式跟踪到这里出错。。 listLen=num;//记录数量 pos+=sizeof(UINT);
for(int i=0;i<listLen;i++)//逐项读取每个记录,加入链表
{
contact *tempnode=new contact;
CopyMemory((PVOID)tempnode,(PVOID)pos,sizeof(contact));//复制结点数据
pos+=sizeof(contact);//指针后移 LPTSTR content=new TCHAR[tempnode->len+1];
CopyMemory((PVOID)content,(PVOID)pos,(tempnode->len+1)*sizeof(TCHAR));
pos+=(tempnode->len+1)*sizeof(TCHAR); tempnode->content=content;
tempnode->next=NULL; if(!head)
head=rear=tempnode;
else
rear->next=tempnode;
}

return TRUE;
}
其中调试的时候跟踪到ClearContact();出错,该方法的代码为:
void CContact::ClearContact()
{
contact *tempnode=head;//这里出错
while(head)
{
head=head->next;
delete tempnode;
}

listLen=byteLen=0;
}跟踪到上面的定义一个临时结构指针指向头结点时出错,请问是什么原因,谢谢!