关于使用MiniGUI的段错误应该如何分析的问题

kemo422 2008-09-28 08:58:30
我遇到因为段错误导致进程死掉

描述:
当响应键盘事件(MSG_KEYDOWN)时,出现段错误。日志显示会运行到该事件的结束(运行到break),在break之前会发送MSG_CLOSE消息和产生另一个窗口。
出现这种段错误时,在每个动作之前加打印语句,就不会出现段错误。删除打印语句,段错误又出现。

有时候更换单版这种错误就会消失或重现。


个人分析:
关闭或产生另一个窗口时指针引起段错误 , 关闭和产生另一个窗口都封装到一个函数里了, 很多模块会使用这些方法,只有少数几个会出现段错误。
或者 minigui 的消息循环本身不稳定导致段错误

代码不能发布,请达人帮忙分析,谢谢。
...全文
136 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arthur_ 2008-09-29
  • 打赏
  • 举报
回复
很可能你 打印的缓冲设置的不够大, 比如你想显示3个字符, 但是这个printf(以它为例) 却打印了10个字符,

剩下的7个字符所在的空间(或者地址)是你不应该访问的(OS没有给你分配), 这个时候它会报”缺页“(linux系统是这样的,其它的我想也类似吧) 于是引起异常最终结果就是段错误。
kemo422 2008-09-29
  • 打赏
  • 举报
回复
谢谢
我根据现象推断 i/o操作会影响段错误
不知道是不是这样
如果是,是如何影响的呢?
Arthur_ 2008-09-28
  • 打赏
  • 举报
回复
minigui 的消息循环本身不稳定导致段错误

这个你暂时不用考虑, 不会的。
Arthur_ 2008-09-28
  • 打赏
  • 举报
回复
一般来说:
段错误一般是程序使用了一个不属于它的内存,导致内核页面异常,对于用户来说就是段错误。
看看你的指针使用情况, I/O输入输出情况(类似printf之类)

你关闭窗口,新键窗口似乎有new(malloc),获得delete(free)的动作, 你在free的时候指针是否有效呢?
不防先从这里切入分析下哈

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧