linux出现segment fault怎么解决?

linux出现segment fault怎么解决?,第1张

Linux系统下面出现:Segmentfault(段错误)提示信息,有时候是由于你自己在编写程序的过程中,有数组越界、或者是内存泄漏(例如:引用了空指针)等原因造成的。具体是哪一种情况,就需要自己仔细查看自己编写的源程序,到底哪里有程序漏洞。

Linux是一套免费使用和自由传播的类Unix *** 作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的 *** 作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络 *** 作系统。

Linux *** 作系统诞生于1991年10月5日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的 *** 作系统。

在图形计算中,一个桌面环境(Desktopenvironment,有时称为桌面管理器)为计算机提供一个图形用户界面(GUI)。但严格来说窗口管理器和桌面环境是有区别的。桌面环境就是桌面图形环境,它的主要目标是为Linux/Unix *** 作系统提供一个更加完备的界面以及大量各类整合工具和使用程序,其基本易用性吸引着大量的新用户。桌面环境名称来自桌面比拟,对应于早期的文字命令行界面(CLI)。一个典型的桌面环境提供图标,视窗,工具栏,文件夹,壁纸以及像拖放这样的能力。整体而言,桌面环境在设计和功能上的特性,赋予了它与众不同的外观和感觉。

我这里是ubuntu x86-64,照着抄你的代码运行非常正常。

编译运行:

as run.s -o run.o

ld run.o -o run

./run

GDB调试也没问题

GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1

Copyright (C) 2018 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from run...done.

(gdb) b _start

Breakpoint 1 at 0x400078: file run.s, line 6.

(gdb) r

Starting program: /home/×××××××/Desktop/run

Breakpoint 1, _start () at run.s:6

6movl $1, %eax

(gdb) ni

7movl $0, %ebx

(gdb) ni

8int $0x80

(gdb) ni

[Inferior 1 (process 10617) exited normally]

(gdb) b _start

在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的

1)访问系统数据区,尤其是往 系统保护的内存地址写数据

最常见就是给一个指针以0地址, unsigned char *ptr = 0x00

2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

我以前也遇到过这个问题后来就是参考这个帖子找到问题的,希望可以帮助到你

http://blog.csdn.net/yeyuangen/article/details/6822004


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7469143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存