一个关于指针的有关问题,老大们帮忙看看

一个关于指针的问题,老大们帮忙看看
while(packet)
{
if(packet->prcID==phandle->prcID&&packet->length>0)
{
if(packet->send)
{
memcpy(sendbuf+sendend, packet->data+packet->headlen,packet->length);
sendend=sendend+packet->length;
WORD ODLength;
memcpy(&ODLength, sendbuf+sendst,2*sizeof(BYTE));
AnsiString pt=htons(packet->sourcePort);
if(ComboBox10->Items->IndexOf(pt)<0)
{
ComboBox10->Items->Add(pt);
}
while(ODLength+sendst<=sendend)
{
OrderStream *p=new(OrderStream);
p->length=ODLength;
p->order=(BYTE *)malloc((ODLength+1)*sizeof(BYTE));
p->belong=packet;
p->send=packet->send;
p->port=packet->sourcePort;
memcpy(p->order,sendbuf+sendst,ODLength);
sendst=sendst+ODLength;
if(sendst+2<sendend) memcpy(&ODLength, sendbuf+sendst,2*sizeof(BYTE));
else ODLength=3;
if(phandle->orders)  phandle->orders->InsertOrder(p);
else phandle->orders=p;
}
if(sendst==sendend)   {sendst=0;sendend=0;}
else
{
memcpy(sendbuf, sendbuf+sendst,(sendend-sendst+1)*sizeof(BYTE));
sendend=sendend-sendst;
sendst=0;
}
}
else
{
memcpy(recvbuf+recvend, packet->data+packet->headlen,packet->length);
recvend=recvend+packet->length;//运行到这里出错----------------------------------
WORD ODLength;
memcpy(&ODLength, recvbuf+recvst,2*sizeof(BYTE));
while(ODLength+recvst<=recvend)
{
OrderStream *p=new(OrderStream);
p->length=ODLength;
p->order=(BYTE *)malloc((ODLength+1)*sizeof(BYTE));
p->belong=packet;
p->send=packet->send;
p->port=packet->destPort;
memcpy(p->order,recvbuf+recvst,ODLength);
recvst=recvst+ODLength;
if(recvst+2<recvend) memcpy(&ODLength, recvbuf+recvst,2*sizeof(BYTE));
else ODLength=3;
if(phandle->orders)  phandle->orders->InsertOrder(p);
else phandle->orders=p;
}
if(recvst==recvend)   {recvst=0;recvend=0;}
else
{
memcpy(recvbuf, recvbuf+recvst,(recvend-recvst+1)*sizeof(BYTE));
recvend=recvend-recvst;
recvst=0;
}
            }
}
packet=packet->next;
}

运行到程序中标记的位置时候指针packet突然指向了一个莫名其妙的地址,,既不是链表的前一个也不是后一个
,也不是他自己应有的地址,而且运行时不是每次都出错,也不是因为链表长短导致出错,搞晕了……
不知道是哪里出了问题,,大家帮忙看看,,谢谢!!
------解决方案--------------------
在前一行的memcpy前,检查一下recvend和packet->length是否超界
------解决方案--------------------
最好锁定一个能重复的出错条件,比如打开某一个文件就出错或其它类似条件,然后在逐步找出出错的地方,如果不能锁定出错条件,随机出错的话,确实比较麻烦,可以写一个详细的log文件,等出错了再去查找log文件中相关记录
------解决方案--------------------
使用codeguard等工具,可以帮助定位内存错误。
试下吧。