嵌入式C语言学习过程中遇到的问题?

4 阅读1分钟

1.(数组)我定义的数组只有4项,但是我访问第7项,输出结果却是0?

int main()
{
	int AAA[5] = {0,1,6,6,6};
	printf("%d",AAA[6]);
	return 0;
 } 

数组越界访问导致的未定义行为解析

一、问题根源

您的代码中存在数组越界访问错误:

int AAA[5] = {0,1,6,6,6}; // 数组大小为5,有效索引范围:0-4
printf("%d",AAA[6]);       // 访问了索引6,超出有效范围
二、为什么输出0?

C语言不检查数组边界,越界访问会读取内存中随机数据

  • 输出0是因为该内存地址恰好存储0值(可能是未初始化的栈空间默认值)

  • 实际结果完全不可预测,不同编译器/平台可能输出:

    • 随机数字(如-12345
    • 程序崩溃(Segmentation Fault)
    • 覆盖其他变量数据(严重时导致系统异常)
三、嵌入式开发中的风险

在MCU等资源受限环境中,越界访问可能:

  1. 破坏外设寄存器配置(如改写UART控制寄存器)
  2. 导致程序跑飞(HardFault错误)
  3. 泄露敏感数据(读取到加密密钥区域)