VC Combobox 控件
for(iter = begin_Itr; iter != end_Itr; ++iter)
{
CropStu cstr=*iter;
CropStu *mCrop=new CropStu;
mCrop->crop_id=cstr.crop_id;
mCrop->crop_sort=cstr.crop_sort;
mCrop->crop_name=cstr.crop_name;
mCrop->crop_type=cstr.crop_type;
CString cropname=cstr.crop_name.c_str();
int Index=m_ComboCrop.AddString(cropname);
m_ComboCrop.SetItemDataPtr(Index,(void*)mCrop);//
}
两个疑问:
1、int Index=m_ComboCrop.AddString(cropname);为什么Index经常会出现一样的呢?
一样的话,m_ComboCrop.SetItemDataPtr(Index,(void*)mCrop);//这边会不会出问题?
2、这个new 出来的CropStu如何释放,我是在下面这个函数里释放的:
//清空ComCrop数据
void CQqfcDlg::ClearComCrop()
{
int i=0;
for (i=0;i<m_ComboCrop.GetCount();i++)
{
CropStu *temp=(CropStu*)m_ComboCrop.GetItemDataPtr(i);
delete temp;
}
m_ComboCrop.ResetContent();//清空原有数据
}
这样释放到底对不对,因为有内存泄露的问题,感觉像是这边泄露的。
for(iter = begin_Itr; iter != end_Itr; ++iter)
{
CropStu cstr=*iter;
CropStu *mCrop=new CropStu;
mCrop->crop_id=cstr.crop_id;
mCrop->crop_sort=cstr.crop_sort;
mCrop->crop_name=cstr.crop_name;
mCrop->crop_type=cstr.crop_type;
CString cropname=cstr.crop_name.c_str();
int Index=m_ComboCrop.AddString(cropname);
m_ComboCrop.SetItemDataPtr(Index,(void*)mCrop);//
}
两个疑问:
1、int Index=m_ComboCrop.AddString(cropname);为什么Index经常会出现一样的呢?
一样的话,m_ComboCrop.SetItemDataPtr(Index,(void*)mCrop);//这边会不会出问题?
2、这个new 出来的CropStu如何释放,我是在下面这个函数里释放的:
//清空ComCrop数据
void CQqfcDlg::ClearComCrop()
{
int i=0;
for (i=0;i<m_ComboCrop.GetCount();i++)
{
CropStu *temp=(CropStu*)m_ComboCrop.GetItemDataPtr(i);
delete temp;
}
m_ComboCrop.ResetContent();//清空原有数据
}
这样释放到底对不对,因为有内存泄露的问题,感觉像是这边泄露的。
既使一样,SetItemDataPtr也不会有问题。第一次Index是0,调用SetItemDataPtr为0项设置Ptr
第二次Index还是0, 调用SetItemDataPtr为0项设置Ptr,这时第一次插入的字符串变成第1项,与他关联系的Ptr仍然是正确的。你释放的代码也是正确的。如果调用DeleteString,那么对应索引的Ptr也要delete掉。