我遇到的大多数来源都将分段错误定义为以下内容:它们在程序引用未定义的虚拟内存区域时发生
但由于我尚未上过操作系统课程,我通常不知道这意味着它是虚拟内存的“未定义区域”......
此外,我的很多C程序都会遇到分段错误,不幸的是我不知道如何修复它们。是否有任何关于如何避免这些错误的好技巧,以及当程序的所有逻辑看起来都没问题时如何处理?
答案 0 :(得分:1)
更简单地说,分段错误就是您正在读取或写入您不允许访问的内存,因为您不拥有它。
一个简单的例子是在堆栈上使用一个变量,然后是一些代码。说我们有
char a[4];
int i=0;
for(i=0; i<1000; ++0)
a[i]='a';
printf("Hi this line will never get printed because last line killed it\n");
所以在堆栈上我们有4个字节分配给'a',另外4个分配给int'i',现在我们有代码就是函数。事情就是for语句将1000个字节写入'a',覆盖'i',并且还会删除它后面的代码。