c++線程創建傳遞的參數發生改變


看看如下代碼,覺得輸出會是什么?

 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)注釋取消,等待線程方法訪問之后,再退出就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM