看看如下代码,觉得输出会是什么?
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)注释取消,等待线程方法访问之后,再退出就可以了。
时间: 2024-11-09 21:22:53