免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: weifeng270
打印 上一主题 下一主题

linux 多线程溢出问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-05-23 11:29 |只看该作者
这一句话
char* recvbuf = new char[6400];

和这句话

nrecvlen = ::recv(psock, recvbuf, 6400, 0);

引起的多线程问题

论坛徽章:
0
12 [报告]
发表于 2012-05-23 16:03 |只看该作者
找到了。

bool get_cmd(char*& buf, int& nrecvlen, int& ncmd, int& ndatalen)
{
        if(nrecvlen>10 && nrecvlen <= 6400)//判断收到的数据是否符合标准
        {
                memcpy(&ncmd, buf+6, 4);
                ncmd = ntohl(ncmd);
                memcpy(&ndatalen, buf+2, 4);
                ndatalen = ntohl(ndatalen);
                buf = buf+10;

                //更新接收数据长度
                nrecvlen-=10;
                return true;
        }
        return false;
}
是这个函数

把指针往向移了10位,导致的。

问题完美解决。

论坛徽章:
6
申猴
日期:2013-10-08 17:32:32金牛座
日期:2013-10-18 19:45:53天秤座
日期:2013-10-18 20:17:34处女座
日期:2014-02-11 10:10:29丑牛
日期:2014-02-15 10:44:15巳蛇
日期:2014-02-18 22:05:54
13 [报告]
发表于 2012-06-19 17:41 |只看该作者
程序处理线程退出后,线程所占用的资源释放好像有问题
                      if((err = pthread_create(&ntid, NULL, AnswerClientThread, (void*)newsock)) != 0)
                                {
                                        printf("AnswerClientThread线程创建失败!\n");
                                }
                        else
                                {
                                        printf("AnswerClientThread线程被创建\n");
                                }
                        
                        if(ntid !=0)
                                {                        
                                        pthread_join(ntid,NULL);
                                        printf("AnswerClientThread线程已经结束\n");
                                }
                        else
                                {
                                        printf("AnswerClientThread线程未结束\n");               
                                }

                                pthread_detach(ntid);

可以在AnswerClientThread中加入pthread_detach(pthread_self());这样可以保证线程资源释放掉
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP