在什么情况下,会产生Access violation问题啊?
   具体情况如下:
       我在通讯录中打开对话框,然后添加一条信息,当我 把这条信息用sendto发送出去的时候,产生了地址冲突的错误,Sendto 相关函数没有问题,在请各位大侠指教一二。

解决方案 »

  1.   

    BOOL CMeBusinessSocket::Contact_Send_Business_SwitchAddGroupInfo(short hUser, 
                             unsigned char *UserNBR, unsigned char *GroupName)
    {
    //增加组
    TRACE("发送增加组:hUser->%d,UserNBR->%s,GroupName-> 
                     %s\n",hUser,UserNBR,GroupName); unsigned char SendBuffer[1000];
    BOOL result;
    memset(SendBuffer,0,1000); SendBuffer[0]=1;
    SendBuffer[1]=2;
    SendBuffer[2]=3;
    SendBuffer[3]=0;
    SendBuffer[4]=50;
    *(short*)&SendBuffer[5]=hUser;
    SendBuffer[7]=1;
    SendBuffer[8]=0;
    SendBuffer[9]=strlen((char*)UserNBR);
    strncpy((char*)&SendBuffer[10],(char*)UserNBR,strlen((char*)UserNBR));
    strncpy((char*)&SendBuffer[35],(char*)GroupName,20);
    // SendBuffer[9]= 11;
    // strncpy((char*)&SendBuffer[10],"13800571234",11);
    // strncpy((char*)&SendBuffer[35],"22",2); result=User_Send_SwitchBuffer(SendBuffer,55);
    return result;
    }BOOL CMeBusinessSocket::User_Send_SwitchBuffer(const char *SendBuffer, int count)
    {
    BOOL ret;
    ret=SendTo(SendBuffer,count,9999,"192.200.188.102");
    return (ret!=SOCKET_ERROR);
    }类是这个CMeBusinessSocket,Contact_Send_Business_SwitchAddGroupInfo()是其中一个函数
            User_Send_SwitchBuffer()是其中传送给另一个UDP的函数 (端口:9999,IP:192.200.188.102)如果我在CMeBusinessSocket的其它函数里面调用 
    Contact_Send_Business_SwitchAddGroupInfo(hUser,UserNBR,GroupName);
    则在BOOL CMeBusinessSocket::User_Send_SwitchBuffer(const char *SendBuffer, int count)
    里面的SendTo()是可以发送成功,不会出现Access Violation错误但当我在另一个对话框时,CTransDlg这个类是一个对话框,里面有刚刚CMeBusinessSocket的对像
    CMeBusinessSocket* TransMeBusinessSocket;
    在对话框CTransDlg里又有一个对话框TransAddGroupDlg;[作用就是一个ComBoBox,把填入的信息Copy到CTransDlg中去]
    void CTransDlg::OnAddgroupSwitch() 
    {
    // TODO: Add your command handler code here
    short hUser;
    unsigned char UserNBR[25];
    unsigned char GroupName[20]; hUser = 0;
    // strncpy((char*)UserNBR,(char*)pSupTermDlg->m_szUserNBR,25);
    // strncpy((char*)UserNBR,strSwitchID,25);
    strncpy((char*)UserNBR,"13800571234",25); TransAddGroupDlg = new CTransAddGroupDlg;
    if(IDOK==TransAddGroupDlg->DoModal())    //跳出对话框,里面就是出现一个ComBoBox
                                    //目的就是把ComBoBox的信息加到GroupName里面去
    {
                strncpy((char*)GroupName,(char*)(LPCTSTR)TransAddGroupDlg->m_strGroupName,20);
                strncpy((char*)GroupName,"加的组名",20);
       TransMeBusinessSocket->Contact_Send_Business_SwitchAddGroupInfo
                       (hUser,UserNBR,GroupName);
    }
    if(TransAddGroupDlg)
    delete TransAddGroupDlg;
    TransAddGroupDlg=NULL;
    UpdateData(TRUE);
    }但我在CTransDlg里,弹出CTransAddGroup的对话框时,然后填入我要的信息,比如:计算机1班,
    这时在
    BOOL CMeBusinessSocket::Contact_Send_Business_SwitchAddGroupInfo(short hUser, 
                             unsigned char *UserNBR, unsigned char *GroupName)
    里面的信息内容都是正确的,但在这个函数运行到
    BOOL CMeBusinessSocket::User_Send_SwitchBuffer(const char *SendBuffer, int count)
    中的SendTo(SendBuffer,count,9999,"192.200.188.102")时,就会出现一个
    Unhandled exception in **.exe (MFCN42D.DLL) Oxc0000005:Access Violation;其中,BOOL CMeBusinessSocket::User_Send_SwitchBuffer(const char *SendBuffer, int count)这个函数没有问题的,因为其它信息都能发送成功,
    请教这个问题应该怎么样解决呀,我试了好多时间都没有成功呀。希望大家给我指点一下呀。真是谢谢的说: