c - 如何始终使错误的 C 程序出现段错误?

标签 c segmentation-fault

考虑 C 的以下两行:

int a[1] = {0};
a[1] = 0;

第二行在内存中不应该写的地方进行了写访问。有时这样的程序会在执行过程中出现段错误,有时不会,这取决于我假设的环境,也可能是其他因素。

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

这是出于教学目的。

最佳答案

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

出于教学目的,您可以查看 GCC(https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html 中的 -fsanitize=address)和 Clang(https://clang.llvm.org/docs/AddressSanitizer.html)等流行编译器中的地址清理器。

简单来说,这些选项会导致编译器使用额外的逻辑来检测内存访问,以捕获越界内存访问并产生用户可见的错误(尽管不完全是段错误消息),从而允许用户发现此类错误并修复它们。

这可能就是您正在寻找的。

关于c - 如何始终使错误的 C 程序出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47419044/

相关文章:

c - #定义宏错误

c - 哪种二维矩阵表示更快

c - 了解 pthread_detach

c - 疾病模拟器上的段错误

c - strncpy 段错误

c - 如何为 C 中声明之外的字符串赋值?总线错误/段错误

c - 如何在c中打印类似以下格式的数字?

无法编译 GL ES 2.0 着色器

c - 尝试访问 for 循环中的指针时出现段错误

c++ - 有没有办法获取在处理信号期间访问的指针?