char *data = (char *)th + sizeof(tcp_header);//得到数据的起始地址 char *Originaldata = NULL;
char *GetContext=NULL;
Originaldata = data;
GetContext   = data;
char Context[1000]={0};
char kind[20]={0};

Get_EmailContext(GetContext,Context,kind);
                        //这个地方 data 的指针没有变动
if (strlen(Context) > 0){
                                 //在这个地方data就往后移动了 char *p =NULL;
p=Context;
int psize = strlen(p);  //结尾符号需要去掉
int iCount= 0; //判断P是否只有空格,如果是的话,则不需要往下执行
while(*p)
{
if (*p==32)
iCount ++;
p++;
}
if (psize!=iCount  )
{
if(lookup->next != NULL)                 //已有纪录
{

Get_InfoNext(ih, sport, dport, Originaldata, lookup, 2,Context,kind);
}
else//无记录,新的邮件  第一次跑得时候进了下面代码得到 lookup和head_in
{
//检测邮件头



Get_InfoFirst(ih, sport, dport, Originaldata, lookup, 2,Context,kind);
}
}
}大家帮我看看 Originaldata 和data的指针为什么往后移动了呢

解决方案 »

  1.   

    估计是Get_EmailContext内容太大数组越界了?
    指针地址变了么?
      

  2.   

    问题应该处在Get_EmailContext(GetContext,Context,kind); 一行。查这个函数,设断点。
      

  3.   

    Get_EmailContext(GetContext,Context,kind); 
                            //这个地方 data 的指针没有变动 
    if (strlen(Context) >  0){ 
                                     //在这个地方data就往后移动了   !!  
    ========================================
    data 值改变了??
    我想问一下你是如何知道这个信息的?我想是不是什么地方搞错了?
    Get_EmailContext(GetContext,Context,kind); 
                            //这里输出 data 的值看看
    if (strlen(Context) >  0){ 
                                     //这里输出 data 的值看看
      

  4.   

    一种可能的情况是 Get_EmailContext 获取的数据过多,超过了 Context 的容量了 ...检查一下 Context 是不是空间足够了
      

  5.   

    如果楼主说的是对的,Originaldata 和data 里面的值变了。可能是Get_EmailContex(GetContext,Context,kind); 给Context,和kind赋值的时候,数据过大。把Originaldata 和data 的内存区给占了。