linux运行程序段错误··要怎么解决··

linux运行程序段错误··要怎么解决··,第1张

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

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

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

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

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

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

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

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

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

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

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

第二个参数,必须是你的系统中已经存在的用户名,否则就会出错;

因此,需要在函数返回结果上加一个判断,是否为NULL

正确的代码如下:

#include <unistd.h>

#include <sys/types.h>

#include <pwd.h>

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

struct passwd *pw

if(argc == 2)

{

if ((pw = getpwnam(argv[1])) == NULL)

{

fprintf(stderr, "no entry\n")

exit(EXIT_FAILURE)

}

printf("name=%s, uid=%d, gid=%d, home=%s, shell=%s\n", pw->pw_name, pw->pw_uid, pw->pw_gid, pw->pw_dir, pw->pw_shell)

}

else printf("参数不正确\n")

return 0

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存