今天写了一段很sb的代码,现在整出来希望以后不再犯这么简单错误,以下只是局部代码,但是还是能说明我想说的问题.
for(i=header;i!=tail;)
{
if(ShareMem[i]=='\n')
{
StrBuff=(char*)malloc(sizeof(char)*MAXBUFF);//记得释放所分配的内存,防止内存泄漏
ZeroMemory(StrBuff,sizeof(char)*MAXBUFF);
for(;header!=i;)
{
*StrBuff++=ShareMem[header];
header=(header+1)%MAXBUFF;
}
*StrBuff='\0';
#ifdef ANALYSISGPSDATA_H_
DWORD wds;
ZeroMemory(strLog,sizeof(char)*MAXBUFF);
memcpy(strLog,StrBuff,strlen(StrBuff));
strLog[strlen(strLog)]='\r';
strLog[strlen(strLog)]='\n';
WriteFile(file,strLog,strlen(strLog),&wds,NULL);
#endif
DispatchGMessage((HWND)value,StrBuff);
break;
}
i=(i+1)%MAXBUFF;
}
在使用的过程中我移动了StrBuff指针,之后我用使用StrBuff作为参数传给了DispatchGMessage,但是此时StrBuff已经指向了字符串的末尾,在DispatchGMessage获得不了我真正所需的字符串。如下代码为修改版本:
for(i=header;i!=tail;)
{
if(ShareMem[i]=='\n')
{
strBuffTemp=StrBuff=(char*)malloc(sizeof(char)*MAXBUFF);//记得释放所分配的内存,防止内存泄漏
ZeroMemory(StrBuff,sizeof(char)*MAXBUFF);
for(;header!=i;)
{
*strBuffTemp++=ShareMem[header];
header=(header+1)%MAXBUFF;
}
*strBuffTemp='\0';
#ifdef ANALYSISGPSDATA_H_
DWORD wds;
ZeroMemory(strLog,sizeof(char)*MAXBUFF);
memcpy(strLog,StrBuff,strlen(StrBuff));
strLog[strlen(strLog)]='\r';
strLog[strlen(strLog)]='\n';
WriteFile(file,strLog,strlen(strLog),&wds,NULL);
#endif
DispatchGMessage((HWND)value,StrBuff);
break;
}
i=(i+1)%MAXBUFF;
}