【发布时间】:2013-06-29 09:59:47
【问题描述】:
我陷入了一个简单的指针/转换问题:
我尝试将一个包含 2 个结构的数组作为参数传递给 pthread_create 中的 pthread 函数。代码如下:
struct sockaddr_in addr_left, addr_right;
struct sockaddr_in* addr_vec [2] = {&addr_left, &addr_right};
pthread_create (&thread_forward, NULL, thread_func_forward, (struct sockaddr**)addr_vec);
thread_func_forward 内部:
void * thread_func_forward (void * argv) {
struct sockaddr_in* addr_left = ((struct sockaddr_in*)argv + 0);
struct sockaddr_in* addr_right = ((struct sockaddr_in*)argv + 1);
}
由于某种原因它不能正常工作,程序可以执行最后几行而不会出现分段错误,但是当我访问结构的成员时,它们完全改变了
【问题讨论】:
-
我猜
addr_left、addr_right和数组是函数的局部变量,在栈上。当你从这个函数返回时,这些堆栈变量已经消失/垃圾。 -
您是否尝试过使用普通函数调用而不是线程?效果好吗?
标签: c pointers struct pthreads