下面是我写的一个函数,目的是输出一个表的每一项到ListBox中,但是我要CString 变量str1中每个字符间相隔一个“-->”,但是下面的程序却老是在循环里的AddString处出错,系统提示是“0x1021674c”指令应用的“0x24924925”内存。该内存不能为“read”!用断点则是运行到i=str1.GetLength()那个地方就提示“Access violation”!请指点.......
void CDMLOGFILEDlg::outLarSequence()
{
CString str,str1,str2; //临时变量
CString tmp1,tmp2,tmp3,tmp4;
float support;
int temp;
int i=0;
temp=getcustmernumber();
m_list.ResetContent();
str.Format(_T("%2d"),m_minisupp);
m_list.AddString(" Sequential Pattern With Support > "+str+"%");
m_plsset=new LarSequence(CDMLOGFILEDlg::m_pdb);
if(m_plsset->IsOpen())
m_plsset->Close();
m_plsset->Open();
if(m_plsset->IsEOF())
m_list.AddString("没有大满足该支持度的大序列产生!");
while(!m_plsset->IsEOF())
{
str1=m_plsset->m_sequence;
support=float(m_plsset->m_support);
support=float(100*support/temp);
str2.Format(_T("%8.2s"),support);
//m_list.AddString(str1+" support: "+str2+"%");
//m_plsset->MoveNext();
i=str1.GetLength();
switch(i)
{
case 1: //输出只有一个项集的序列
m_list.AddString(str1+" support: "+str2+"%");
break;
case 2: //输出两个项集的序列
tmp1=str1.GetAt(0);
tmp2=str1.GetAt(1);
m_list.AddString(tmp1+"-->"+tmp2+" support: "+str2+"%");
break;
case 3: //输出三个项集的序列
tmp1=str1.GetAt(0);
tmp2=str1.GetAt(1);
tmp3=str1.GetAt(2);
m_list.AddString(tmp1+"-->"+tmp2+"-->"+tmp3+" support: "+str2+"%");
break;
case 4: //输出四个项集的序列
tmp1=str1.GetAt(0);
tmp2=str1.GetAt(1);
tmp3=str1.GetAt(2);
tmp4=str1.GetAt(3);
m_list.AddString(tmp1+"-->"+tmp2+"-->"+tmp3+"-->"+tmp4+" support: "+str2+"%");
break;
default:
return;
}
m_plsset->MoveNext();
}
m_plsset->Close();
delete m_plsset;
}
解决办法我发给你,你再去试试吧,我想你可以解决了的。