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;
}这是副线程的线程函数,线程函数里的代码在主线程能正常运行,在副线程会崩溃,求指点啊

解决方案 »

  1.   

    崩溃点是哪里??Debug就崩溃么?这个很好查的,看看资源是不是互斥之类的。如果是Release崩溃,请输出dmp文件分析。
      

  2.   

    Debug和Release 都会崩溃,如果把printf("%-8.8x\t",pAddress)注释掉不会崩溃,求指点
      

  3.   

    我发现只要在if(*(SHORT*)pAddress==75)语句里有任何代码都会崩溃啊,为什么呐
      

  4.   

    pAddress= (PVOID) ((PSHORT)pAddress+1);这个是不是越界了,如果循环次数多,踩内存了。
      

  5.   

    你需要检查 mbi.Protect 是否 PAGE_GUARD。
    如果是,访问会触发异常 STATUS_GUARD_PAGE (0x80000001) 。因为你创建了子线程,导致进程数据空间的数据块分布发生了改变,其中有些 PAGE_GUARD 的数据块。
    你可以创建子线程空跑,然后在主线程中调用试试。