如何制作错误的C程序段错误?

Arc*_*ain 2 c segmentation-fault

考虑以下两行C:

int a[1] = {0};
a[1] = 0;
Run Code Online (Sandbox Code Playgroud)

第二行在内存中的某个位置进行写访问.有时这些程序会在执行过程中产生段错误,有时则不会,这取决于我想要的环境,也可能是其他事情.

我想知道是否有办法尽可能地强制这些程序进行段错误(例如通过以特殊方式编译它们,或者在某些虚拟机中执行它们,我不知道).

这是出于教育目的.

小智 9

根据C语言标准,这些类型的访问是未定义的行为,并且编译器和运行时没有义务使它们成为段错误(尽管它们显然有时会这样做).

出于教学目的,您可以看看地址消毒剂中流行的编译器GCC一样(-fsanitize=addresshttps://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html)和锵(HTTPS://clang.llvm. org/docs/AddressSanitizer.html).

简单来说,这些选项会使编译器使用额外的逻辑来检测内存访问,以捕获越界内存访问并产生用户可见的错误(尽管不是一个非常明显的段错误消息),允许用户发现这些错误并修复它们.

这可能就是你要找的东西.