线程参数打印垃圾值

时间:2015-01-31 15:22:12

标签: c multithreading

我在传递参数的线程上尝试了一个简单的程序。

#include<stdio.h>
#include<pthread.h>
#include<malloc.h>

#define NUMTHREADS 5

typedef struct _data_t{
        int data;
        char* name;
}_data;

void* mythread(void* arg){
        _data* mydata = (struct _data_t*) arg;
        printf("\n no : %d name : %s \n",mydata->data,mydata->name);
        pthread_exit(NULL);
}

int main(){
        pthread_t tid[NUMTHREADS];
        _data mydata;
        mydata.data = 100;
        mydata.name = "Netapp";
        int i;
        for(i=0;i<NUMTHREADS;i++){
                pthread_create(&tid[i],NULL,&mythread,(void*)&mydata);
        }
        pthread_exit(NULL);
        return 0;
}

输出:

angus @ ubuntu:〜/ angus / thread $ ./a.out

否:0名称:1�I��^H��H���PTI��0@

否:0名称:1�I��^H��H���PTI��0@

否:0名称:1�I��^H��H���PTI��0@

否:0名称:1�I��^H��H���PTI��0@

否:0名称:1�I��^H��H���PTI��0@

1 个答案:

答案 0 :(得分:3)

main终止时,mydata不再存在,但线程仍在运行并访问它。

您应该在退出main(使用pthread_join)之前等待生成的线程终止,或者定义mydata以使其超出main的范围。< / p>