关于“段错误”个人小结

网友投稿 1436 2022-09-25 14:15:02

关于“段错误”个人小结

段错误个人理解就是访问了不可访问的内存!要么这个内存去不存在,要么就是受操作系统保护!

个人遇到段错误的几次都是由于指针的使用,没有考虑周全。。。比如访问了一个根本不存在的区域,比如:

#include

#include

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

{

DIR  *dp;

struct dirent *dirp;

if(argc!=2) //只列出了命令时,提示输入文件夹名称

{    printf("请输入想要列出的文件夹名称!\n");

//exit(1);//此处不退出则结果包含段错误!!

-------->KEY

}

if((dp=opendir(argv[1]))==NULL)//如果此处不存在argv[1],则显示“段错误”

printf("不能打开该目录!");

while((dirp=readdir(dp))!=NULL)

printf("%s\n",dirp->d_name);

closedir(dp);

exit(0);

}

这段程序功能是模拟ls命令,显示文件夹下面的文件名,

gcc -o myls myls.c

**********

./myls  /media/yule

.....   //显示娱乐盘符下的内容

************

./myls 回车

请输入想要列出的文件夹名称!

段错误

分析下:此处的命令行参数个数为1,argv[1]根本没有被赋值,所以结果可想而知,就是指针使用上的常见错误!

至于受操作系统保护一说,我想到了一个简短的代码:

#include

int main()

{

int i = 0;

scanf ("%d", i); /* should have used &i */

printf ("%d\n", i);

return 0;

}

$:gcc -o test test.c

$:./test

10

段错误

通过gdb调试我发现,问题所在就是,i被初始化为0,而scanf一句此时功能是想地址为i的内存输入一个值,也就是说我们正在尝试想地址为0 的区域输入一个值!

其实第一个也可以说成数组越界,都会产生段错误,我都遇到过!

以上是我的一点点体会理解,不知道说的有没有什么不妥的,第一次发技术帖(自认为)希望借此抛砖引玉阿~小弟在此谢过各位拉~

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网络营销推广有哪些方式?(网络营销推广有哪些方式)
下一篇:笔记本上的FreeBSD进不了loader界面[原创 已解决]
相关文章