comp.lang.c FAQ 列表·
第 16.8 题
Q“段错误”、“总线错误”和“通用保护错误”是什么意思?什么是“core dump”?
A这些症状(以及任何类似的内存访问违规或保护错误消息)通常意味着您的程序试图访问它不应该访问的内存,这几乎总是由于堆栈损坏或指针使用不当造成的。可能的原因包括:
- 局部(“自动”、“堆栈分配”)数组溢出
- 意外使用空指针(另请参阅问题 5.2 和 5.20)
- 未初始化、未对齐或以其他方式分配不正确的指针(请参阅问题 7.1、7.2 和 16.7)
- 指向已被重新定位的内存的过时别名(请参阅问题 7.29)
- malloc 内存块(malloc)的损坏(请参阅问题 7.19)
- 尝试修改只读值(已声明为const以及字符串字面量——请参阅问题 1.32)
- 函数参数不匹配,尤其是涉及指针时;两种可能性是scanf(请参阅问题 12.12)和fprintf(确保它接收到第一个FILE *参数)
在 Unix 系统下,任何这些问题几乎都必然会导致“core dump”:一个名为core的文件,[脚注] 在当前目录中创建,其中包含崩溃进程的内存映像,用于调试。
“总线错误”和“段错误”之间的区别可能有意义,也可能没有意义;不同版本的 Unix 在不同的情况下会生成这些信号。粗略地说,段错误表示试图访问不存在的内存,而总线错误表示试图以非法方式访问内存(可能是由于未对齐的指针;请参阅问题 16.7)。
另请参阅问题 16.3 和 16.4。
关于此 FAQ 列表 关于 Eskimo 搜索 反馈 版权由
托管