首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在pthread_create期间大小为8的写入无效

在pthread_create期间大小为8的写入无效
EN

Stack Overflow用户
提问于 2014-05-11 17:45:41
回答 1查看 1K关注 0票数 0

我有一个简单的TCP服务器应用。它由主函数、TCP线程函数和线程定时器组成(TCP线程在45秒后结束)。问题在于线程的创建。服务器运行了一段时间,然后突然崩溃。这就是我创建线程的方式(在while循环中):

代码语言:javascript
复制
for (i = 0; i < NTHREADS; i++)
    freethreads[i] = i;

clients++;
pthread_mutex_lock(&clientMtx);
tmp.sockfd = new_sockfd;
tmp.threadid = NTHREADS - clients;

pthread_create(&threadid[freethreads[NTHREADS - clients]], &attr, &tcp_main, &tmp);
sleep(0);
pthread_mutex_unlock(&clientMtx);

这是巴斯泰宾公司的伐研和地狱的原木:

缬磨

螺旋研磨

我不知道,这部分是什么意思:

代码语言:javascript
复制
==3405== Invalid write of size 8
==3405==    at 0x4E3A52F: pthread_create@@GLIBC_2.2.5 (pthread_create.c:563)
==3405==    by 0x4027DF: main (robot4.c:489)
==3405==  Address 0x8872e9c0 is not stack'd, malloc'd or (recently) free'd

非常感谢你的每一个建议。

编辑:

三读和自由阅读部分:

代码语言:javascript
复制
pthread_t threadid[NTHREADS]; 
int freethreads[NTHREADS];
for (i = 0; i < NTHREADS; i++)
freethreads[i] = i;
EN

回答 1

Stack Overflow用户

发布于 2014-05-11 17:57:05

仅按您在问题中显示的代码来看,clients可能会增加到比NTHREADS更大,从而导致对freethreads数组有一个负索引。

索引超出数组的界限,在任何方向都会导致http://en.wikipedia.org/wiki/Undefined_behavior

您需要检查clients永远不会比NTHREADS大,当然,当客户端断开连接时也会减少它(同时要注意它永远不会低于零)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23595914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档