将参数传递给_beginthread() – 什么是错的?

我有这个代码,我没有得到预期的结果……什么是错的?

typedef struct { int data1; int data2; }t; void foo(int a, int b) { Handle handle; t arg; arg.data1 = a; arg.data2 = b; handle = (HANDLE) _beginthread( myFunc, 0, (void*) &arg); } void myFunc(void *param) { t *args = (t*) param; int x = args->data1; int y = args->data2; printf("x=%d, y=%d\n", x, y); } 

argfoo定义的局部变量 – 只要该函数结束就会被销毁,但是在另一个线程中运行的myFunc仍然会尝试访问它。 你应该在堆上分配arg并在完成后在线程中将其销毁。

 void foo(int a, int b) { HANDLE handle; t *arg; arg = (t *)malloc(sizeof(t)); arg->data1 = a; arg->data2 = b; handle = (HANDLE) _beginthread( myFunc, 0, (void*) arg); } void myFunc(void *param) { t *args = (t*) param; int x = args->data1; int y = args->data2; printf("x=%d, y=%d\n", x, y); free(args); } 

另请注意, HANDLE应全部为大写字母。

你的arg变量是函数foo中的局部变量,因此在函数结束后它将无法在内存中使用。

所以你可以做两件事:

1.全局定义你的arg变量。

 typedef struct { int data1; int data2; }t; t arg; 

或者你也可以在帮助中为arg分配内存,正如卡萨布兰卡所解释的那样。

谢谢Alok.Kr.