当前位置: 技术问答>linux和unix
线程传递参数问题
来源: 互联网 发布时间:2016-12-20
本文导语: 线程传递参数,为什么运行时会出现segmentation fault,谢谢指教下! #include #include #include #include typedef struct arg_struct ARG; struct arg_struct { char arg1[10]; int arg2; float arg3; }; void * thfn(void * arg) { ARG ...
线程传递参数,为什么运行时会出现segmentation fault,谢谢指教下!
#include
#include
#include
#include
typedef struct arg_struct ARG;
struct arg_struct
{
char arg1[10];
int arg2;
float arg3;
};
void * thfn(void * arg)
{
ARG *p = (ARG *)arg;
printf("arg1 is : %s, arg2 is : %d, arg3 is : %fn", p->arg1, p->arg2, p->arg3);
return NULL;
}
int main(int argc, char **argv)
{
int err;
ARG arg;
pthread_t tid;
strcpy(arg.arg1, argv[1]);
arg.arg2 = atoi(argv[2]);
arg.arg3 = atof(argv[3]);
err = pthread_create(&tid, NULL, thfn, (void *)&arg);
if(err != 0)
{
printf("can not create thread %sn", strerror(err));
exit(1);
}
return 0;
}
#include
#include
#include
#include
typedef struct arg_struct ARG;
struct arg_struct
{
char arg1[10];
int arg2;
float arg3;
};
void * thfn(void * arg)
{
ARG *p = (ARG *)arg;
printf("arg1 is : %s, arg2 is : %d, arg3 is : %fn", p->arg1, p->arg2, p->arg3);
return NULL;
}
int main(int argc, char **argv)
{
int err;
ARG arg;
pthread_t tid;
strcpy(arg.arg1, argv[1]);
arg.arg2 = atoi(argv[2]);
arg.arg3 = atof(argv[3]);
err = pthread_create(&tid, NULL, thfn, (void *)&arg);
if(err != 0)
{
printf("can not create thread %sn", strerror(err));
exit(1);
}
return 0;
}
|
在pthread_create后面加一句试试:
pthread_join()
pthread_join()
|
是主线程先退出,之后主线程中的arg所占用的内存释放掉了,而副函数中的p指向arg,此时再使用p所指内存的数据,会出现段错误。
|
假如你是生成a.out
你必须传3个参数进去
./a.out 123 2 3.0
这样就没有问题了.
你必须传3个参数进去
./a.out 123 2 3.0
这样就没有问题了.