多线程pthread_kill出现的莫名其妙的段异常

多线程pthread_kill出现的莫名其妙的段错误
想实现:一个进程开启一个线程A,让线程A创建5个小线程abcde,线程A将任务给这5个小线程,如果某一个小线程运行结束,则在创建小线程来完成任务。但是框架却出问题了,有时候启动的时候程序就会出现段错误。有时候正常,如果正常ctrl+c,多试几次就能遇到段错误,求大神指导,代码贴上来
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>

int test_search(pthread_t* pid)
{
int pthread_kill_err;
int i;
for(i = 0; i < 5; i++)
{
if(!pid[i] || ESRCH == pthread_kill(pid[i], 0))
{
return i;
}

//if(!pid[i])
// return i;
//pthread_kill_err = pthread_kill(pid[i], 0);
//if(pthread_kill_err == ESRCH)
//{
// //pid[i]=0L;
// return i;
//}

}
return -1;
}
void* fun3()
{
;
}

void* funn(void* arg)
{

printf("come in\n");
pthread_t *tid = (pthread_t*)arg;
int j = 0;
while(1)
{
if(j<5)
{
pthread_attr_t a;
pthread_attr_init(&a);
pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
pthread_create(&(tid[j]), &a, fun3, NULL);
pthread_attr_destroy(&a);
j++;
}
else
{
int ret = test_search(tid);
if( ret >= 0)
{
printf("ret = %d\n", ret);
pthread_attr_t a;
pthread_attr_init(&a);
pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
pthread_create(&(tid[ret]), &a, fun3, NULL);
pthread_attr_destroy(&a);
}
}
}
}

int main()
{


pthread_t pid[5];

pthread_t pid2;
pthread_attr_t a;
pthread_attr_init(&a);
pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);

int ret = pthread_create(&pid2, &a, funn, (void*)(pid));

pthread_attr_destroy(&a);

while(1);
return 0;
}

编译gcc *.c -lpthread
------解决思路----------------------
看代码看不出问题,出现段错误的时候,core信息是什么看看
------解决思路----------------------
看代码已经很清楚了,man pthread_kill,你这样调用会找到一个运行结束的线程,但是当你找不到一个应经运行结束的线程是返回-1,这样就可能发对段错误啊。
------解决思路----------------------
不对啊,我大概瞅了眼,你的程序有几处不明白啊。
只有j++,j--在哪里啊。
------解决思路----------------------
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>


#ifndef ARRAY_SIZE
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
#endif


void* fun3(void* param)
{
    while(1);
}


int main()
{
    pthread_t pid[5];
    pthread_attr_t a;
    
    pthread_attr_init(&a);
    pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
    
    for( i = 0; i < ARRAY_SIZE(pid) )
    {
        pthread_create(&pid[i], &a, fun3, NULL);
    }

    pthread_attr_destroy(&a);

    while(1);
    return 0;
}