我有一个简单的TCP服务器应用。它由主函数、TCP线程函数和线程定时器组成(TCP线程在45秒后结束)。问题在于线程的创建。服务器运行了一段时间,然后突然崩溃。这就是我创建线程的方式(在while循环中):
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);这是巴斯泰宾公司的伐研和地狱的原木:
缬磨
螺旋研磨
我不知道,这部分是什么意思:
==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非常感谢你的每一个建议。
编辑:
三读和自由阅读部分:
pthread_t threadid[NTHREADS];
int freethreads[NTHREADS];
for (i = 0; i < NTHREADS; i++)
freethreads[i] = i;发布于 2014-05-11 17:57:05
仅按您在问题中显示的代码来看,clients可能会增加到比NTHREADS更大,从而导致对freethreads数组有一个负索引。
索引超出数组的界限,在任何方向都会导致http://en.wikipedia.org/wiki/Undefined_behavior。
您需要检查clients永远不会比NTHREADS大,当然,当客户端断开连接时也会减少它(同时要注意它永远不会低于零)。
https://stackoverflow.com/questions/23595914
复制相似问题