valus
December 26th, 2000, 03:40 AM
The problem is: I
have device, which sends 5 bytes every 500 ms so my computer recieved
5*120 bytes per minute and when I run my program it occupies in memory
1300KB and after two days it is 10000KB. Maybe I allocate memory and
don't release it, but I don't know where. Here is statement of OnOnCommMscomm() . Could someone help me please?
CString s_pom;
BYTE bajt[5];
char sprava[70];
char hexa[5][3];
char binval[5][9];
char binar[5][9];
time_t cas;
struct tm *p_cas;
BYTE den;
char pom[9];
int pocet;
VARIANT var;
COleSafeArray svar;
void* pSrc;
CListBox m_list;
void CDconnect::OnOnCommMscomm()
{
switch(m_ComPort.GetCommEvent())
{
case 2: //vbMSCommEvReceive
var = m_ComPort.GetInput();
svar = var;
svar.AccessData( &pSrc );
memcpy( &bajt, pSrc, 5*sizeof(BYTE) );
svar.UnaccessData();
for(b=0;b<5;b++)
for(b=0;b<5;b++){
_itoa( bajt[b], hexa[b], 16 );
_itoa( bajt[b], binval[b], 2 );
wsprintf(binar[b], "%s", Doplnosem(binval[b]));
}
kod++;
wsprintf(sprava, "%d%s%s%s%s%s%s%s%s%s%s%s",kod, -
",binar[0]," ", binar[1]," ", binar[2]," ", binar[3]," ", binar[4],"
");
m_list.AddString(sprava);
time(&cas);
s_pom += ctime(&cas);
strcpy(zaznam[poc_dat].time, ctime(&cas));
s_pom += " ";
wsprintf(sprava, "%s%s%s%s%s%s%s%s%s%s%s", " ",hexa[0],"H ",
hexa[1],"H ", hexa[2],"H ", hexa[3],"H ", hexa[4],"H ");
s_pom += sprava;
wsprintf(sprava, "%s%d%s%d%s%d%s%d%s%d%s", " ",bajt[0]," ",
bajt[1]," ", bajt[2]," ", bajt[3]," ", bajt[4]," ");
s_pom += sprava;
m_list.AddString(s_pom);
s_pom = "";
if(m_list.GetCount()>MAXPOCET){
m_list.DeleteString(1);
m_list.DeleteString(0);
}
pocet = m_list.GetCount();
m_list.SetCurSel(pocet-1); // select last row
p_cas = localtime( &cas );
if((BYTE)p_cas->tm_yday != den){
den = p_cas->tm_yday;
kod = 0;
}
break;
}//switch
}
char* CDconnect::Doplnosem(char* value)
{
switch(strlen(value))
{
case 8:
wsprintf(pom, "%s", value);
break;
case 7:
wsprintf(pom, "%s%s", "0",value);
break;
case 6:
wsprintf(pom, "%s%s", "00",value);
break;
case 5:
wsprintf(pom, "%s%s", "000",value);
break;
case 4:
wsprintf(pom, "%s%s", "0000",value);
break;
case 3:
wsprintf(pom, "%s%s", "00000",value);
break;
case 2:
wsprintf(pom, "%s%s", "000000",value);
break;
case 1:
wsprintf(pom, "%s%s", "0000000",value);
break;
case 0:
wsprintf(pom, "%s%s", "00000000",value);
break;
}
return pom;
}
have device, which sends 5 bytes every 500 ms so my computer recieved
5*120 bytes per minute and when I run my program it occupies in memory
1300KB and after two days it is 10000KB. Maybe I allocate memory and
don't release it, but I don't know where. Here is statement of OnOnCommMscomm() . Could someone help me please?
CString s_pom;
BYTE bajt[5];
char sprava[70];
char hexa[5][3];
char binval[5][9];
char binar[5][9];
time_t cas;
struct tm *p_cas;
BYTE den;
char pom[9];
int pocet;
VARIANT var;
COleSafeArray svar;
void* pSrc;
CListBox m_list;
void CDconnect::OnOnCommMscomm()
{
switch(m_ComPort.GetCommEvent())
{
case 2: //vbMSCommEvReceive
var = m_ComPort.GetInput();
svar = var;
svar.AccessData( &pSrc );
memcpy( &bajt, pSrc, 5*sizeof(BYTE) );
svar.UnaccessData();
for(b=0;b<5;b++)
for(b=0;b<5;b++){
_itoa( bajt[b], hexa[b], 16 );
_itoa( bajt[b], binval[b], 2 );
wsprintf(binar[b], "%s", Doplnosem(binval[b]));
}
kod++;
wsprintf(sprava, "%d%s%s%s%s%s%s%s%s%s%s%s",kod, -
",binar[0]," ", binar[1]," ", binar[2]," ", binar[3]," ", binar[4],"
");
m_list.AddString(sprava);
time(&cas);
s_pom += ctime(&cas);
strcpy(zaznam[poc_dat].time, ctime(&cas));
s_pom += " ";
wsprintf(sprava, "%s%s%s%s%s%s%s%s%s%s%s", " ",hexa[0],"H ",
hexa[1],"H ", hexa[2],"H ", hexa[3],"H ", hexa[4],"H ");
s_pom += sprava;
wsprintf(sprava, "%s%d%s%d%s%d%s%d%s%d%s", " ",bajt[0]," ",
bajt[1]," ", bajt[2]," ", bajt[3]," ", bajt[4]," ");
s_pom += sprava;
m_list.AddString(s_pom);
s_pom = "";
if(m_list.GetCount()>MAXPOCET){
m_list.DeleteString(1);
m_list.DeleteString(0);
}
pocet = m_list.GetCount();
m_list.SetCurSel(pocet-1); // select last row
p_cas = localtime( &cas );
if((BYTE)p_cas->tm_yday != den){
den = p_cas->tm_yday;
kod = 0;
}
break;
}//switch
}
char* CDconnect::Doplnosem(char* value)
{
switch(strlen(value))
{
case 8:
wsprintf(pom, "%s", value);
break;
case 7:
wsprintf(pom, "%s%s", "0",value);
break;
case 6:
wsprintf(pom, "%s%s", "00",value);
break;
case 5:
wsprintf(pom, "%s%s", "000",value);
break;
case 4:
wsprintf(pom, "%s%s", "0000",value);
break;
case 3:
wsprintf(pom, "%s%s", "00000",value);
break;
case 2:
wsprintf(pom, "%s%s", "000000",value);
break;
case 1:
wsprintf(pom, "%s%s", "0000000",value);
break;
case 0:
wsprintf(pom, "%s%s", "00000000",value);
break;
}
return pom;
}