• 5351阅读
  • 3回复

运行qte时segment default [复制链接]

上一主题 下一主题
离线sunzhibo123
 

只看楼主 倒序阅读 楼主  发表于: 2010-05-26
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2010-09-08) —
关键词: qt-embedded
运行qte时出现了segment default  这是怎么回事啊?
离线benbenmajia

只看该作者 1楼 发表于: 2010-05-27
当地址空间分配给一个进程之后,接下来的访问会导致实际物理地址的分配,但是这个时候才会发现内存不足,那么,现在要做的不是发送信号(这个是我猜的),而是直接找些进程来KILL了。 [/quote]
是的,内存不足不会引起段错误。段错误通常出现在访问了非法的地址后,非法地址分为3类:
1. 访问的地址没有对应的物理内存。这类错误主要出现在越界访问,例如栈越界。比如说当前进程的栈只有5个页和它对应,共20k大小(x86平台),你访问的地址超过了这个范围,就会发生segmentation fault。

2.对地址的操作与该地址的属性不符合。例如该地址对应的内存是只读的,如文本段,你却试图进行写操作。

3.低权限访问高权限地址。这类情况发生在用户进程试图访问内核空间。例如x86中,TASK_SIZE以上的地址为内核空间,当用户态进程试图访问这些地址时,segmentation fault。

需要特别指出的是,并非所有的栈越界都会产生segmentation fault。我个人对linux进程栈的初始分配策略还不太清楚,例如写一个函数,实际栈只需要几百个字节,但在x86上越界访问80k的地址也不会出错,所以我对一个进程初始栈大小是多少还比较迷惑。有清楚的朋友不妨讲解一下。

当内存不足时,kernel会首先调用free_more_page()函数释放一些页,例如page cache、slub,如果仍然不够,杀掉进程。还是不够,就启动臭名昭著的oom_killer了


也有可能是环境配置的问题
安然.....
离线hqyhqyhq

只看该作者 2楼 发表于: 2010-09-07
在windows下面使用QT Creator写程序并运行,如果出现越界问题就会导致整个程序奔溃,能有什么好的办法使这种越界问题不会影响到整个程序的正常执行呢?
离线ahnushe

只看该作者 3楼 发表于: 2010-09-08
指针的问题,好好查查。。。。。。
快速回复
限100 字节
 
上一个 下一个