【发布时间】:2019-03-23 18:29:15
【问题描述】:
喂,
我想知道这样的事情是否可能,而不使用 heap(malloc/calloc) 假设我有一个结构 像这样:
typedef struct {
void* par1_;
void* par2_;
}parameters;
还有一个位置:
typedef struct {
short x;
short y;
}position;
这是一个被线程调用的函数。
void* car(void* arg)
{
parameters car_type = *((parameters*) arg);
int first_par = *(int*)&car_type.par1_;
int second_par = *(int*)&car_type.par2_; // can I do this?
//if yes how do I extract now values from position struct "pos.x and pos.y"
}
从我的主线程中,我想在结构“位置”中标记位置,将该结构分配给第二个参数“par2_”,然后将其发送到我的功能车。
int main()
{
parameters pars;
position pos;
pos.x = 44;
pos.y = 25;
pars.par1_ = (void*) CAR_TYPE; // Global Variable
pars.par2_ = &pos; // not sure about this?
pthread_t tid;
pthread_create(&tid, NULL, car, (void*) &pars);
pthread_join(tid, NULL);
如果这是一个愚蠢的问题,我很抱歉。显然我对这一切都很陌生。再一次,我不想使用堆。这是我的程序的最小示例。
【问题讨论】:
-
在分配
position的地址时,为什么要将car_type.par2_转换为int*? -
可能不会将堆栈变量的地址传递给线程。我不知道会发生什么,但这似乎是个坏消息。
-
@Swordfish 大脑冻结!感谢您指出这一点,现在一切都清楚了。
-
@DenzZuckerpuppe Kein 问题,Pueppchen。