189 8069 5689

linux命令段错误 linux中段错误

linux段错误问题

linux内存管理把这个内存空间分为了两块 一块是0-3G的用户空间,一块是3G-4G的内核空间。一般的程序分配内存是在用户空间分配。所以,这个地址是正常的。

创新互联成都企业网站建设服务,提供成都网站制作、网站建设、外贸网站建设网站开发,网站定制,建网站,网站搭建,网站设计,成都响应式网站建设公司,网页设计师打造企业风格网站,提供周到的售前咨询和贴心的售后服务。欢迎咨询做网站需要多少钱:13518219792

malloc分配内存的时候,是在一个线性区里面分配,每个程序都有属于自己的线性区。如果这个地址恰好分配在不属于自己进程的线性区里面。那么肯定是会报段错误。

段错误不是内核空间才会发生的事情。

用户程序只能访问属于自己的线性区,这个线性区是属于用户空间的。用户程序不能直接访问内核空间。

这些知识都是属于linux内核的。如果不清楚的话,可以看看内核方面的书。

在Linux下写汇编总是会出现段错误是什么情况?

我这里是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 ;

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:

;.

Find the GDB manual and other documentation resources online at:

;.

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

6 movl $1, %eax

(gdb) ni

7 movl $0, %ebx

(gdb) ni

8 int $0x80

(gdb) ni

[Inferior 1 (process 10617) exited normally]

(gdb) b _start

linux 下 mysql命令行输入命令 报 段错误 (core dumped)

如果不是自己写的程序,建议先阅读一下文档

是不是文件的权限,目录,环境变量,使用方法等有问题。

如果是自己写的

那么出现段错误 有可能是越界等错误

建议GDB调试,或检查源码

linux段错误

/*************************************

文件名: server.c

linux 下socket网络编程简例 - 服务端程序

服务器端口设为 0x8888 (端口和地址可根据实际情况更改,或者使用参数传入)

服务器地址设为 192.168.1.104

作者:kikilizhm#163.com (将#换为@)

*/

#include stdlib.h

#include sys/types.h

#include stdio.h

#include sys/socket.h

#include linux/in.h

#include string.h

int main()

{

int sfp,nfp; /* 定义两个描述符 */

struct sockaddr_in s_add,c_add;

int sin_size;

unsigned short portnum=0x8888; /* 服务端使用端口 */

printf("Hello,welcome to my server !\r\n");

sfp = socket(AF_INET, SOCK_STREAM, 0);

if(-1 == sfp)

{

printf("socket fail ! \r\n");

return -1;

}

printf("socket ok !\r\n");

/* 填充服务器端口地址信息,以便下面使用此地址和端口监听 */

bzero(s_add,sizeof(struct sockaddr_in));

s_add.sin_family=AF_INET;

s_add.sin_addr.s_addr=htonl(INADDR_ANY); /* 这里地址使用全0,即所有 */

s_add.sin_port=htons(portnum);

/* 使用bind进行绑定端口 */

if(-1 == bind(sfp,(struct sockaddr *)(s_add), sizeof(struct sockaddr)))

{

printf("bind fail !\r\n");

return -1;

}

printf("bind ok !\r\n");

/* 开始监听相应的端口 */

if(-1 == listen(sfp,5))

{

printf("listen fail !\r\n");

return -1;

}

printf("listen ok\r\n");

char gc;

while(1)

{

sin_size = sizeof(struct sockaddr_in);

/* accept服务端使用函数,调用时即进入阻塞状态,等待用户进行连接,在没有客户端进行连接时,程序停止在此处,

不会看到后面的打印,当有客户端进行连接时,程序马上执行一次,然后再次循环到此处继续等待。

此处accept的第二个参数用于获取客户端的端口和地址信息。

*/

nfp = accept(sfp, (struct sockaddr *)(c_add), sin_size);

if(-1 == nfp)

{

printf("accept fail !\r\n");

return -1;

}

printf("accept ok!\r\nServer start get connect from %#x : %#x\r\n",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));

/* 这里使用write向客户端发送信息,也可以尝试使用其他函数实现 */

if(-1 == write(nfp,"hello,welcome to my server \r\n",32))

{

printf("write fail!\r\n");

return -1;

}

while((gc = getchar()) != EOF) /* 按ctrl + z 键结束,或者给定一个特殊字符,如'#',即 hile((gc = getchar()) != '#') */

{

write(nfp,gc,1);

}

printf("write ok!\r\n");

close(nfp);

}

close(sfp);

return 0;

}

在SUSE linux上执行sed命令报“段错误”或者“Memory fault”是什么原因,怎样解决

如果只有root用户才出错的话,而其他用户可以成功执行,那就先排除命令本身的问题。

你可以对比一下root用户和可以成功执行的用户两者间的环境差异,用set命令各导出一份环境变量列表,看是否哪里有不同。

另外,还可以对比检查一下ulimit

-a,看是否不同。

有的时候,普通用户和root的PATH和LD_LIBRARY_PATH设置的不同会导致一些异常,比如说执行的根本不是同一个路径下的命令。


分享标题:linux命令段错误 linux中段错误
标题链接:http://cdxtjz.cn/article/hgojpg.html

其他资讯