看看如下代码,觉得输出会是什么?
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI Func(LPVOID p);
typedef struct
{
int firstArgu;
long secArgu;
}MyType;
void test()
{
MyType MyTypeArgu={0};
MyTypeArgu.firstArgu=1;
MyTypeArgu.secArgu=1;
CreateThread(NULL,0,Func,&MyTypeArgu,0,NULL);
//Sleep(1000);
}
void main()
{
test();
system("pause");
}
DWORD WINAPI Func(LPVOID p)
{
MyType* param=(MyType*)p;
int intValue=param->firstArgu;
long longValue=param->secArgu;
cout <<"firstArgu="<<intValue<<endl<<"secArgu="<<longValue<<"."<<endl;
cout<<"请等待……"<<endl<<endl;
return 0;
}
最终的输出结果其实并不确定。
并不是输出
firstArgu=1
secArgu=1
关键是CreateThread创建线程之后,将指针传递给线程方法后,test方法就退出了,就会将MyType的内存释放了,导致线程再接受到指针后,访问内存,却不是原来的数据了。
如果想要输出正确的结果,只需将//Sleep(1000)注释取消,等待线程方法访问之后,再退出就可以了。