关于dll多线程时出现栈访问冲突的有关问题

关于dll多线程时出现栈访问冲突的问题
本帖最后由 hack_bxc 于 2013-09-03 17:15:18 编辑
问题出在我的一个非MFC的dll工程中:
我的dll导出函数中,有一个函数会用_beginthread创建一个线程。
这个线程的作用就是CreateDialog,并一直GetMessage->TranslateMessage->DispatchMessage。

但是我用_beginthread创建的线程经常出现在栈上的访问冲突
比如当前ESP=04B3FFF8,当前指令是push ****。然后在运行当前指令。
就提示有未经处理的异常: 0xC0000005: 写入位置 0x04b3fff4 时发生访问冲突。
我把_beginthread的栈大小改成10M也不行,改成0也不行。
而且我发现出现栈访问冲突都是调用user32的API才出现的
比如调用DefDlgProc就会出现栈访问冲突。
请教下各位大侠,这个问题该怎么解决? 
多线程 线程

------解决方案--------------------
从这些简短的介绍来看,不该是你程序的问题,不要花过多的时间去分析那些ASM代码,特别设计到堆栈,那些简短的ASM代码很那分析出点什么。
如果代码内没什么问题不妨考虑下是不是你的系统出了什么问题,拿这段代码去别的电脑去试下有没有问题
------解决方案--------------------
堆栈都是由系统和你的代码自动管理的,你看下你线程里是否有没释放的资源,如果你没有大的内存申请,那么查查是否有小的在for或while中申请的内存,或需要释放的句柄没释放掉,引起的内存溢出?
在VC调试时,左下角有个可以检查内存溢漏的标签,你点下可以测内存溢出,我手机打的,没vc软件,你如果找不到可百度下 VC 检测 内存 遗漏(或 溢出),能找到详细的介绍。
你试着用这种方法debug下试试