什么是分段错误?

什么是分段错误?C和C++有什么不同吗?分段错误和悬空指针是如何关联的

分段错误是由于访问“不属于您”的内存而导致的一种特定错误。它是一种帮助机制,可以防止您损坏内存并引入难以调试的内存错误。每当你遇到segfault时,你就知道你的内存有问题——访问一个已经被释放的变量,写入内存的只读部分,等等。在大多数语言中,Segmentation fault本质上是相同的,它会让你搞乱内存管理,C和C++中的分段错误没有显著性差异。

有很多方法可以获得segfault,至少在较低级别的语言中,如C++。获取segfault的常见方法是取消对空指针的引用:

int*p=NULL;
*p=1;

当您尝试写入标记为只读的内存部分时,会发生另一个SEGFULT:

char*str="Foo";//编译器将常量字符串标记为只读
*str='b';//这意味着这是非法的,会导致segfault

悬空指针指向一个不再存在的东西,如下所示:

char*p=NULL;
{
字符c;
p=&c;
}
//现在p摇摇欲坠

指针p会悬空,因为它指向在块结束后不再存在的字符变量c。当您尝试取消对悬挂指针的引用(如*p='A')时,可能会出现segfault

发表评论