例题:
有以下两个文件,输出结果是 ()
文件A:
int a[10] = {100};
文件B:
#include <stdio.h>
extern int *a;
void main()
{
printf("%d", a[0]);
}
A) 100 B) 0 C) 段错误 D) 编译错误
测试结果:
解释:
在extern int *a和printf("%d", a[0])这两条语句中,编译器觉得a是一个指针变量,所以它提取存储在那里的指针值,然后对这个结果运行间接訪问操作。但a实际上是整型数组的起始位置,所以作为"指针"获得的这个值实际上是数组的第一个整形元素。其结果解释为一个地址。然后对它进行间接訪问。作为结果,它或者将提取一些随意内存位置的内容。或者因为某种地址错误而导致程序失败。
段错误的常见原因总结:
一、段错误究根到底就是访问了非法内存
这个内存区要么是不存在的,要么 是受到系统保护的,还有可能是缺少文件或者文件损坏。可能的原因包括:<