c/c++语言开发共享将参数传递给_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=%dn", 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=%dn", x, y); free(args); } 

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

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

    所以你可以做两件事:

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

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

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

    谢谢Alok.Kr.

      以上就是c/c++开发分享将参数传递给_beginthread() – 什么是错的?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560059.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐