Eri*_*ich 6 c segmentation-fault
我想知道对一段 C 代码进行可靠的分段错误的最佳方法是什么?
我完全意识到这是不好的行为,永远不应该用在一个软件中,但我想知道我如何能够持续地强制它发生。
编辑:我得到的答案不是我最初想要的,但对于理解为什么这个问题没有可靠答案很有价值。
很难定义一种方法来在未定义的平台上对程序进行分段错误。甲分段故障是不对于所有平台(例如,简单的小计算机)所定义的松散术语。
仅考虑支持进程的操作系统,进程可以收到发生分段错误的通知。
此外,将操作系统限制为“类unix”操作系统,进程接收 SIGSEGV 信号的可靠方法是 kill(getpid(),SIGSEGV)
与大多数跨平台问题的情况一样,每个平台可能(通常确实如此)对 seg-faulting 有不同的定义。
但为了实用,并回答 EDIT2,当前的 mac、lin 和 win 操作系统将出现段错误
*(int*)0 = 0;
此外,导致段错误并不是坏行为。某些实现assert()会导致可能产生核心文件的 SIGSEGV 信号。当您需要尸检时非常有用。
比导致段错误更糟糕的是隐藏它:
try
{
     anyfunc();
}
catch (...) 
{
     printf("?\n");
}
这隐藏了错误的根源,您所要做的就是:
?
.