Arc*_*ain 2 c segmentation-fault
考虑以下两行C:
int a[1] = {0};
a[1] = 0;
Run Code Online (Sandbox Code Playgroud)
第二行在内存中的某个位置进行写访问.有时这些程序会在执行过程中产生段错误,有时则不会,这取决于我想要的环境,也可能是其他事情.
我想知道是否有办法尽可能地强制这些程序进行段错误(例如通过以特殊方式编译它们,或者在某些虚拟机中执行它们,我不知道).
这是出于教育目的.
小智 9
根据C语言标准,这些类型的访问是未定义的行为,并且编译器和运行时没有义务使它们成为段错误(尽管它们显然有时会这样做).
出于教学目的,您可以看看地址消毒剂中流行的编译器GCC一样(-fsanitize=address在https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html)和锵(HTTPS://clang.llvm. org/docs/AddressSanitizer.html).
简单来说,这些选项会使编译器使用额外的逻辑来检测内存访问,以捕获越界内存访问并产生用户可见的错误(尽管不是一个非常明显的段错误消息),允许用户发现这些错误并修复它们.
这可能就是你要找的东西.