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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)