VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 700|回复: 14

[求助] 服务器端的客户线程访问内存异常

[复制链接]
72_avatar_middle
在线会员 发表于 2016-3-2 13:40:22 | 显示全部楼层 |阅读模式
15驿站币
DWORD WINAPI  CserverDlg::ListenThread(LPVOID pParam)             //监听线程
{
        CserverDlg*server = (CserverDlg*)pParam;
        ASSERT(server!=NULL);
        (此处省略...)
                        INT_PTR idx=  server->m_client.Add(client);
                        client.clientthread = CreateThread(NULL, 0, clientthreadproc, &(server->m_client.GetAt(idx)), CREATE_SUSPENDED, NULL);
                        server->m_client.GetAt(idx).clientthread = client.clientthread;
                        ResumeThread(client.clientthread);
                        Sleep(100);
                }               
        }
}



DWORD WINAPI CserverDlg::clientthreadproc(LPVOID pParam)                    //客户线程
{
        CString strMsg;
        client m_ClientItem = *(client *)pParam;       //这个可以   
        //client *m_ClientItem = (client*)pParam;//使用这个提示访问内存异常,为什么
       (此处省略...)
}





上一篇:何如监控游戏资源的图标被游戏加载调用。如LOL卡牌切牌的技能资源图标。
下一篇:如果修改MFC新建向导?
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-2 13:43:36 | 显示全部楼层
求助,这个问题困扰了好几天了服务器端的客户线程访问内存异常
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-2 13:46:38 | 显示全部楼层
本帖最后由 shuaicoin 于 2016-3-2 14:21 编辑

我现在的vs版本是2013
51_avatar_middle
online_admins 发表于 2016-3-2 15:20:45 | 显示全部楼层
可能你的 client 对象是个局部变量,超过其作用域了就释放了,所以再次访问肯定异常
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-2 16:41:38 | 显示全部楼层
本帖最后由 shuaicoin 于 2016-3-2 16:43 编辑
Syc 发表于 2016-3-2 15:20
可能你的 client 对象是个局部变量,超过其作用域了就释放了,所以再次访问肯定异常


class CserverDlg : public CDialogEx
{
// 构造
public:
        CserverDlg(CWnd* pParent = NULL);        // 标准构造函数
        class client
        {

        public:
                CString ip;
                SOCKET clientsocket;
                HANDLE clientthread;
                CString Mac;
                CserverDlg *m_pMainWnd;
                client()
                {
                        clientsocket = INVALID_SOCKET;
                        clientthread = NULL;
                        m_pMainWnd = NULL;
                }
        };
(此处省略...)
}
可是我定义的是一个成员变量
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-2 16:55:51 | 显示全部楼层
本帖最后由 shuaicoin 于 2016-3-2 16:58 编辑
Syc 发表于 2016-3-2 15:20
可能你的 client 对象是个局部变量,超过其作用域了就释放了,所以再次访问肯定异常


我更改了您的源代码,像这样

修改后

修改后
]然后还是这样

执行

执行
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-2 16:56:52 | 显示全部楼层
服务器端的客户线程访问内存异常
51_avatar_middle
online_admins 发表于 2016-3-2 19:41:08 | 显示全部楼层
shuaicoin 发表于 2016-3-2 16:55
我更改了您的源代码,像这样]然后还是这样

我说的是你在 ListenThread 函数中定义的定义的那个 client,INT_PTR idx=  server->m_client.Add(client); 中的 Add 的那个参数 client ,是局部变量吗?
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-2 19:52:46 | 显示全部楼层
Syc 发表于 2016-3-2 19:41
我说的是你在 ListenThread 函数中定义的定义的那个 client,INT_PTR idx=  server->m_client.Add(client ...

是的服务器端的客户线程访问内存异常
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-2 20:16:14 | 显示全部楼层
Syc 发表于 2016-3-2 19:41
我说的是你在 ListenThread 函数中定义的定义的那个 client,INT_PTR idx=  server->m_client.Add(client ...

可是如果出了作用域销毁了,client对象也已经存储在队列m_client里面,而且客户线程访问也只访问m_client 应该没有访问这个对象吧???服务器端的客户线程访问内存异常服务器端的客户线程访问内存异常服务器端的客户线程访问内存异常
51_avatar_middle
online_admins 发表于 2016-3-3 09:39:12 | 显示全部楼层
shuaicoin 发表于 2016-3-2 20:16
可是如果出了作用域销毁了,client对象也已经存储在队列m_client里面,而且客户线程访问也只访问m_client ...

局部变量恐怕会有问题啊
按照你说的 “如果出了作用域销毁了,client对象也已经存储在队列m_client里面”,有些东西能复制过去,有些东西是不行的
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-3 11:43:16 来自手机 | 显示全部楼层
Syc 发表于 2016-3-3 09:39
局部变量恐怕会有问题啊
按照你说的 “如果出了作用域销毁了,client对象也已经存储在队列m_client里面 ...

可是如果队列m_client没有完全储存,那么为什么作为参数传递时,强转类型CClientItem可以成功,而强转(CClientItem*)就失败了
72_avatar_middle
ico_lz  楼主| 发表于 2016-3-4 21:46:31 | 显示全部楼层
服务器端的客户线程访问内存异常
72_avatar_middle
ico_lz  楼主| 发表于 2016-5-6 13:23:29 | 显示全部楼层
呜呜呜  这个问题已经困扰我3个月了服务器端的客户线程访问内存异常
72_avatar_middle
ico_lz  楼主| 发表于 2016-5-6 13:24:27 | 显示全部楼层
呜呜呜,这个问题已经困扰我3个月多了服务器端的客户线程访问内存异常
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-20 06:01

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表