C语言段错误的有用总结

例题:

有以下两个文件,输出结果是 ()

文件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实际上是整型数组的起始位置,所以作为"指针"获得的这个值实际上是数组的第一个整形元素。其结果解释为一个地址。然后对它进行间接訪问。作为结果,它或者将提取一些随意内存位置的内容。或者因为某种地址错误而导致程序失败。

段错误的常见原因总结:

一、段错误究根到底就是访问了非法内存

这个内存区要么是不存在的,要么 是受到系统保护的,还有可能是缺少文件或者文件损坏。可能的原因包括:<

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值