本文主要是介绍记一次C语言内存越界(内存越界 段错误 Segmentation fault ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 背景
最近在用C++重构原来用C写的SDK,发现一个内存越界问题,记录下来,以供后续参考。
2 问题
代码如下:
#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内存越界运行很长时间也不出错的原因。
这篇关于记一次C语言内存越界(内存越界 段错误 Segmentation fault )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!