首页
社区
课程
招聘
[求助]关于 VC++ 多线程 栈 的访问冲突。
发表于: 2013-9-3 17:06 7903

[求助]关于 VC++ 多线程 栈 的访问冲突。

bxc 活跃值
6
2013-9-3 17:06
7903
前面那个多线程创建对话框的问题已经解决了,在此谢过!
现在又出新问题了。
我用_beginthread创建的线程经常出现在栈上的访问冲突。
比如当前ESP=04B3FFF8,当前指令是push ****。然后在运行当前指令。
就提示有未经处理的异常: 0xC0000005: 写入位置 0x04b3fff4 时发生访问冲突。
我把_beginthread的栈大小改成10M也不行,改成0也不行。
而且我发现出现栈访问冲突都是调用user32的API才出现的。
比如调用DefDlgProc就会出现栈访问冲突。
请教下各位大侠,这个问题该怎么解决?

-----------------------------------------------------------------------------------------------------------
源代码: VEH_Debugger_SRC.7z
程序Dump:Dmp下载

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
你是不是没有考虑调用约定?
2013-9-3 19:06
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3
你觉得没考虑调用约定会出现访问冲突?
2013-9-3 19:22
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
4
有可能.楼主最好能把出错的代码发出来一部分,要不也没法确定是什么导致的
2013-9-3 19:28
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
栈边界异常是系统自动处理的 除非是你的代码有越界写访问
2013-9-3 19:37
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
6
出错的代码在user32中,不在我的程序领空啊。具体应该是DefDlgProc。
我是写的一个对话框回调函数里调用了DefDlgProc。
经常在调用user32中,push/pop等栈操作的指令会引发访问冲突。
我还是第一次见这么奇怪的异常。
2013-9-3 20:02
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
7
都是在user32的领空出现的异常。
2013-9-3 20:03
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
8
函数约定没写好。堆栈平衡方式的约定有问题
2013-9-3 21:49
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
9
要是调用约定的问题,那怎么的也得是函数返回之后的问题,
一般工程里的调用约定就2种,要么cdecl,要么stdcall。
区别就是返回时,cdecl会平衡堆栈。而stdcall在retn的时候平衡。
我这还没返回呢。。。
2013-9-3 21:57
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
WINAPI 一般是stdcall吧! 这个问题自己多调试看看吧!!我也不太清楚
2013-9-3 23:15
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
11
顶个啊。。。
2013-9-5 09:21
0
游客
登录 | 注册 方可回帖
返回
//