debug和release有什么不同?
匪六哥 2003-11-13 10:39:47 本人有一程序,用于播放实时图像和历史回放,实时图像没问题,有问题的是历史图像(debug下正常,release不正常):主要差别为:实时播放时,系统发过来的图像信息前有6个字节的信息头,回放存储的文件是没有这6个信息头的,于是我在读回放文件时,人为加了6个字节的头:
此段程序用于从文件中读取数据,放入对应buffer中:
f = fopen(fileN, "rb" );
if (f==NULL)
{
return 0;
}
fseek(f, current_size, SEEK_SET);
if (fread(s, sizeof( char ), 2, f) > 1)
{
unsigned short size = s[0]*256 +s[1];
if (size>0)
{
m_csRecv[WINDOWSNUM].Lock();
fread(vv[WINDOWSNUM].data, sizeof( char ), size, f);
memcpy(vv[WINDOWSNUM].data+6,vv[WINDOWSNUM].data,size);
vv[WINDOWSNUM].data[0] = HIBYTE(writenum);
vv[WINDOWSNUM].data[1] = LOBYTE(writenum);
vv[WINDOWSNUM].data[2] = HIBYTE(size+6);
vv[WINDOWSNUM].data[3] = LOBYTE(size+6);//11
vv[WINDOWSNUM].data[4]=0;
vv[WINDOWSNUM].data[5] = 0;/**/
vv[WINDOWSNUM].len = size+6;//
vv[WINDOWSNUM].m_picHwnd = hwnd;
writenum++;
if(recvlenall[WINDOWSNUM]+size+6<Q_SIZE)//
{
memcpy(recvbufferall[WINDOWSNUM]+recvlenall[WINDOWSNUM],vv[WINDOWSNUM].data,size+6);//
recvlenall[WINDOWSNUM]+=size+6;//11
}
else
{
int endlen = recvlenall[WINDOWSNUM]+size+6;//11
int leavelen = Q_SIZE - recvlenall[WINDOWSNUM];
memcpy(recvbufferall[WINDOWSNUM]+recvlenall[WINDOWSNUM],vv[WINDOWSNUM].data,leavelen);
recvlenall[WINDOWSNUM]+=leavelen;
recvlenall[WINDOWSNUM] = 0;
unsigned long headlen = endlen%Q_SIZE;
if((headlen < readlp[WINDOWSNUM])||(headlen == readlp[WINDOWSNUM]))
{
memcpy(recvbufferall[WINDOWSNUM],vv[WINDOWSNUM].data+leavelen,headlen);
recvlenall[WINDOWSNUM] = headlen;
}
}//else
m_csRecv[WINDOWSNUM].Unlock();
}
fclose(f);
return current_size+size+2;
}
问题在这段代码:
memcpy(vv[WINDOWSNUM].data+6,vv[WINDOWSNUM].data,size);
vv[WINDOWSNUM].data[0] = HIBYTE(writenum);
vv[WINDOWSNUM].data[1] = LOBYTE(writenum);
vv[WINDOWSNUM].data[2] = HIBYTE(size+6);
vv[WINDOWSNUM].data[3] = LOBYTE(size+6);//11
vv[WINDOWSNUM].data[4]=0;
vv[WINDOWSNUM].data[5] = 0;/**/
vv[WINDOWSNUM].len = size+6;//
vv[WINDOWSNUM].m_picHwnd = hwnd;
writenum++;
加上这6个字节,则历史回放不正常,不加需要修改记录时文件的存储格式,可以做到播放正常,但是和以往软件不兼容,我希望在能和以往软件兼容,但是这段代码应该没问题,因为debug下他是好的。可是到底问题在哪里呢,请高手指点!