segmentation fault是什么意思

2020-10-14 16:26:50 评论 3,863
摘要

segmentation fault中文翻译过来是内存区段错误的意思,其错误的来源多种多样。

segmentation fault是什么意思

数组太大导致栈不够

当数组太大的时候可以更好的分配,进而解决栈不够用的情况。直接代码举例:int N=atoi(argv{1}),I,j:double eigvl{N},若是使用数组,则全部内存的空间都可以分配在stack上,一般stack不会太大。具体解决方法可以用malloc分配到heap上。

复杂的函数调用导致栈不够

该问题在c++中是很少见的问题,具体的现象是在程序调用比较复杂,而stack上变量比较大的时候,一些本来没有问题的函数内报错。出现此问题解决的方法很唯一,那便是要调整stack的大小,让stack的大小满足空间使用。

malloc的参数溢出

segmentation fault也可能是编程人员将malloc的大小的计算放在了括号中,该习惯是一种很不好的习惯,而很多编程人员都存在该习惯,应该注意尽早的改掉。特别是在大小可能很大的时候更容易导致参数溢出,此时就应该马上的把算式写在括号外面,排出报错。

空指针访问

如果说指针为空null,那么对于空指针的读写操作会导致报错。如果说c语言的指针指向了非法区域,然后对其写入,那必将会带来不可预知的后果,最严重的就是程序崩溃,此时也是segmentation fault报错。

当然了,上面所介绍的segmentation fault错误来源并不全面,建议大家到有关专业的论坛或者网站去查找资料,同时在实践中不断地总结经验教训,提高编程水平。

相关文章

AliceABC線上英文補習,適合香港兒童~ 英语问答

AliceABC線上英文補習,適合香港兒童~

AliceABC 簡介 作為一家成立最早的全球化“互聯網+”教育企業之一,AliceABC始終專註於在線外教1對1英文教育,憑借多年的實力累積和過硬的服務質量,目前擁有數萬名全職外教,學員人數達xx,...
i has 还是have 英语问答

i has 还是have

i has 还是have:have和has的用法是靠主语人称来决定的,不是时态。过去完成用had done,现在完成用 have done ,将来完成用will have done...