DWORD WINAPI ThreadProc( LPVOID lpParameter)
{
{
MEMORY_BASIC_INFORMATION mbi;
PVOID pAddress=NULL;
while( VirtualQuery(pAddress,&mbi,sizeof(mbi))==sizeof(mbi) )
{ while(pAddress<(PVOID)((PBYTE)mbi.BaseAddress+mbi.RegionSize)&&mbi.State==MEM_COMMIT)
{
if(*(SHORT*)pAddress==75)
{
printf("%-8.8x\t",pAddress);
}
pAddress= (PVOID) ((PSHORT)pAddress+1);
}
pAddress= (PVOID)((PBYTE)mbi.BaseAddress+mbi.RegionSize);
}
}
return 0;
}这是副线程的线程函数,线程函数里的代码在主线程能正常运行,在副线程会崩溃,求指点啊
{
{
MEMORY_BASIC_INFORMATION mbi;
PVOID pAddress=NULL;
while( VirtualQuery(pAddress,&mbi,sizeof(mbi))==sizeof(mbi) )
{ while(pAddress<(PVOID)((PBYTE)mbi.BaseAddress+mbi.RegionSize)&&mbi.State==MEM_COMMIT)
{
if(*(SHORT*)pAddress==75)
{
printf("%-8.8x\t",pAddress);
}
pAddress= (PVOID) ((PSHORT)pAddress+1);
}
pAddress= (PVOID)((PBYTE)mbi.BaseAddress+mbi.RegionSize);
}
}
return 0;
}这是副线程的线程函数,线程函数里的代码在主线程能正常运行,在副线程会崩溃,求指点啊
如果是,访问会触发异常 STATUS_GUARD_PAGE (0x80000001) 。因为你创建了子线程,导致进程数据空间的数据块分布发生了改变,其中有些 PAGE_GUARD 的数据块。
你可以创建子线程空跑,然后在主线程中调用试试。