当前位置:   article > 正文

一次 STATUS_STACK_BUFFER_OVERRUN 栈溢出错误排查_status_stack_buffer_overrun解决

status_stack_buffer_overrun解决

程序被中断下来后,调试器附加上去,发现调用栈是在调用窗口过程时候中断的,当前的消息是WM_PAINT,其他线索没有,如果继续运行就导致进程退掉了,尝试直接从vs环境调试运行也是同样的结果,但是在Output面板发现的报告了 STATUS_STACK_BUFFER_OVERRUN 字面理解就是栈溢出了,WM_PAINT消息处理时候和栈溢出有啥关系呢,通过窗口句柄找到对应的控件类型和id,到工程搜了一遍,发现有一个listview控件的定制类在,但该类根本没有响应WM_PAINT消息,都是系统默认在画,在看看消息映射部分,发现用的是虚拟列表形式,那就好办了,我对这个消息是有印象的,知道其中的系统缓冲区长度是有限制的,我心想答案已经有了,直接定位到系统回调LVN_GETDISPINFO的响应函数时候,发现真的是粗暴的用lstrcpy来拷贝字符串到系统缓冲区,那解决办法就是wcsncpy_s(pItem->pszText, 260, msgItem.strRecvNames, _TRUNCATE);虽然问题是解决了,但是还没有找到一种办法直接定位到当时栈溢出时候的调用栈,有点郁闷。




参考:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb774760(v=vs.85).aspx

http://msdn.microsoft.com/zh-cn/magazine/cc163311.aspx#S4

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/136998
推荐阅读
相关标签
  

闽ICP备14008679号