【发布时间】:2012-08-20 12:00:26
【问题描述】:
我正在尝试将结构作为参数传递给 pthread_create,但似乎得到了一些奇怪的结果。
该结构有两个成员,第一个是 int,第二个是函数指针:
typedef struct
{
int num;
void (*func)(int);
} foo_t;
我试图在结构中使用的函数:
void myfunc(int mynum)
{
printf("mynum: %d\n", mynum);
}
这是我将传递给我的线程的结构的声明:
foo_t f;
f.num = 42;
f.func = &myfunc;
对 pthread_create 的调用:
pthread_create(&mythread, NULL, mythreadfunc, &f);
最后,我的线程函数:
void mythreadfunc(void *foo)
{
foo_t f = *(foo_t *)foo;
printf("num: %d\n", f.num); // Prints: num: 32776 (undefined?)
(*f.func)(f.num); // Segfaults (again, undefined?)
...
似乎 mythreadfunc 中的强制转换似乎不起作用,我不知道为什么。有什么建议么?谢谢。
【问题讨论】:
-
你能发布完整的代码吗?错误很可能出现在您没有向我们展示的代码中。 (如
f在线程可以访问之前超出范围。) -
@DavidSchwartz 正如你猜到的那样,这是一个范围问题,下次我会尝试发布一个更“独立”的示例,谢谢。
标签: c pointers struct pthreads