最近做一个网络过滤软件,遇到一个问题百思不得其解:
  在WSACONNECT(SOCKET s,...)分析了远端IP地址数据后放入session结构体的一个变量中
  然后做如下判断
    int CheckConnect(...)
   { 
    ...
    return GetAccessInfoIP(m_Session+index);
    
   }
   其中SESSION *m_Session;
      index是对应于这个s的索引号;
       GetAccessInfoIP的函数原型是:int GetAccessInfoIP(SESSION *session);问题是:
    程序(DLL)编译运行都没有问题,运行IE访问网页开始也没有问题,再继续开了几个网页后就会IE自动关闭或者出现IE出错的对话框,
点击调试后发现就是上面的return语句出错。检查发现m_Session+index作为传入参数没有问题,可在GetAccessInfoIP(SESSION *session)
中检查发现session指针的地址存在(但与m_Session+index的地址不符)而且session数组的内容全为“CXX0030: Error: expression cannot be evaluated“
之前m_Session+index数组中的内容都是正确的。搞了很久也没弄清楚错误所在   环境是vc6.0,并且用boundchecker检查过没有发现异常错误。在此向各位高手求教,另外像这样的网络软件大家都怎么测试的?有没有好的方法
期待大家解答,不胜感激!

解决方案 »

  1.   

    检查发现m_Session+index作为传入参数没有问题,可在GetAccessInfoIP(SESSION *session)
    中检查发现session指针的地址存在(但与m_Session+index的地址不符)而且session数组的内容全为“CXX0030: Error: expression cannot be evaluated“ 错误肯定在这,m_Session数组里的变量是否有一些变化,
      

  2.   


    index并不越界,之前用了函数做过判断
      

  3.   


    我也在这里检查了很久,变量突然都变成:CXX0030: Error: expression cannot be evaluated“  另外:自己用CWinInet写了个访问网页的类用来调试程序,单步跟踪都很正常,数据也不会出错!在IE多线程访问的情况下就有问题了,
      请大家帮我出出主意。若有兴趣,留下邮箱,可以传份源代码