记一次C语言内存越界(内存越界 段错误 Segmentation fault )

1 背景

最近在用C++重构原来用C写的SDK,发现一个内存越界问题,记录下来,以供后续参考。

2 问题

代码如下:

c 复制代码
#include <stdio.h>
#include <stdlib.h>

int array1[4] = {1, 2, 3, 4};
int array2[4] = {5, 6, 7, 8};

int main(int argc, char *argv[])
{
    int count = 4;
    int i;

    if(argc > 1)
        count = strtol(argv[1], 0, 0);
    for(i = 0; i < count; i++)
        printf("%d %d\n", i, array1[i]);

    return 0;
}
  • 运行1

    $ ./mem 8
    0 1
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7
    7 8

程序照常结束没有报错。

  • 运行2

    $ ./mem 16
    0 1
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7
    7 8
    8 0
    9 0
    10 0
    11 0
    12 0
    13 0
    14 0
    15 0

程序照常结束没有报错。

  • 运行3

    $ ./mem 1024
    0 1
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7
    7 8
    8 0
    9 0
    10 0
    11 0
    12 0
    13 0
    14 0
    15 0
    .
    .
    .
    1003 0
    1004 0
    1005 0
    1006 0
    1007 0
    1008 0
    1009 0
    1010 0
    1011 0
    1012 0
    1013 0
    1014 0
    1015 0
    1016 0
    1017 0
    1018 0
    1019 0
    Segmentation fault (core dumped)

程序出现段错误,异常退出了。

3 分析

内存越界访问,如果越界不多,程序照常运行,很难发现。只有越界访问超出数据所在段,出现段错误才容易发现。这也是我们的SDK内存越界运行很长时间也不出错的原因。

相关推荐
BackCatK Chen10 分钟前
C语言学习栏目目录
c语言·保姆级教程·c语言入门·c语言学习栏目目录
极客数模2 小时前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
请注意这个女生叫小美5 小时前
C语言 斐波那契而数列
c语言
Legendary_0085 小时前
Type-C 一拖二快充线:突破单口限制的技术逻辑
c语言·开发语言
智者知已应修善业6 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
91刘仁德6 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
No0d1es8 小时前
电子学会青少年软件编程(C语言)等级考试试卷(四级)2025年12月
c语言·青少年编程·电子学会·四级·2025年
皮皮哎哟8 小时前
深入浅出双向链表与Linux内核链表 附数组链表核心区别解析
c语言·数据结构·内核链表·双向链表·循环链表·数组和链表的区别
wanghu20249 小时前
AT_abc443_C~E题题解
c语言·算法
梵刹古音9 小时前
【C语言】 浮点型(实型)变量
c语言·开发语言·嵌入式