码迷,mamicode.com
首页 > 编程语言 > 详细

c++线程创建传递的参数发生改变

时间:2015-09-24 12:38:51      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

看看如下代码,觉得输出会是什么?

 1 #include "stdafx.h"
 2 #include <windows.h>
 3 #include <iostream>
 4 using namespace std;
 5 
 6 DWORD WINAPI Func(LPVOID p);
 7 typedef struct 
 8 {
 9     int firstArgu;
10     long secArgu;
11 
12 }MyType;
13 
14 
15 
16 void  test()
17 {
18     MyType MyTypeArgu={0};
19     MyTypeArgu.firstArgu=1;
20     MyTypeArgu.secArgu=1;
21     CreateThread(NULL,0,Func,&MyTypeArgu,0,NULL);
    //Sleep(1000);
22 } 23 24 void main() 25 { 26 test(); 27 system("pause"); 28 } 29 DWORD WINAPI Func(LPVOID p) 30 { 31 MyType* param=(MyType*)p; 32 int intValue=param->firstArgu; 33 long longValue=param->secArgu; 34 cout <<"firstArgu="<<intValue<<endl<<"secArgu="<<longValue<<"."<<endl; 35 cout<<"请等待……"<<endl<<endl; 36 return 0; 37 }

最终的输出结果其实并不确定。

并不是输出

firstArgu=1
secArgu=1
关键是CreateThread创建线程之后,将指针传递给线程方法后,test方法就退出了,就会将MyType的内存释放了,导致线程再接受到指针后,访问内存,却不是原来的数据了。
如果想要输出正确的结果,只需将//Sleep(1000)注释取消,等待线程方法访问之后,再退出就可以了。

 

c++线程创建传递的参数发生改变

标签:

原文地址:http://www.cnblogs.com/moonandwolf/p/4834541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!