打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
pthread_exit() 参数的不正确使用
    #include<stdio.h>
    #include<pthread.h>
    #include<unistd.h>
    #include<stdlib.h>
    struct foo{
        int a,b,c,d;
    };

    void printfoo(const char *s,const struct foo *fp)
    {
        printf("s is %s\n",s);
        printf("structure at 0x%x\n",(unsigned)fp);
        printf("foo.a=%d\n",fp->a);
        printf("foo.b=%d\n",fp->b);
        printf("foo.c=%d\n",fp->c);
        printf("foo.d=%d\n",fp->d);
    }
    void *thr_fn1(void *arg)
    {
        struct foo foo={1,2,3,4};
        printfoo("thread 1:\n",&foo);
        pthread_exit((void *)&foo);//线程返回值存在foo,栈中,该函数结束释放
    }
    void * thr_fn2(void *arg)
    {
 
        printf("thread 2:ID is %d\n",pthread_self());
 
        pthread_exit((void *)0);
    }
    int main(void)
    {
        
        int err;
        pthread_t tid1,tid2;
        struct foo *fp;
        err=pthread_create(&tid1,NULL,thr_fn1,NULL);
        if(err!=0){
            printf("create thread 1 is failed\n",strerror(err));
            exit(1);
        }
        err=pthread_join(tid1,(void *)&fp);//fp存储被等待线程的返回值
        if(err!=0)
                printf("can't join thread1\n");
        sleep(1);
        err=pthread_create(&tid2,NULL,thr_fn2,NULL);
        if(err!=0)
        {
            printf("create thread 2 is failed\n");
             exit(1);
        }
        sleep(1);
        printfoo("parent :\n",&fp);//fp的内容是thr_fn1中的&foo,已被释放,此处打印的是野指针的内容。
        exit(0);
    }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux 线程学习(一)
UNIX环境编程学习笔记(26)
linux下c语言的多线程编程
c语言多线程编程使用示例
pthread
Linux fork() 详细讲解加例子_乐乐小屋~
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服