C语言开发过程中段错误处理方法之经典
2023-09-14 09:13:23 时间
目录
在C语言实际开发过程中,大家可能会遇到段错误,这种错误也是一种常见的错误,那么,段错误是如何产生的?可能的原因有段错误是因为访问不可访问的内存产生的。
下面是一些典型的段错误产生的原因:
-
访问不存在的内存地址
-
访问只读的内存地址
-
栈溢出
-
内存越界
第一:访问不存在的内存地址
#include <stdio.h>
int main(int argc, char **argv)
{
printf("==================segmentation fault test==================\n");
int *p = NULL;
*p = 1234;
return 0;
}
第二:访问只读的内存地址
#include <stdio.h>
int main(int argc, char **argv)
{
printf("==================segmentation fault test1==================\n");
char *str = "hello";
str[0] = 'H';
return 0;
}
第三:代码栈溢出
#include <stdio.h>
static void test(void)
{
char buf[1024 * 1024] = {0};
static int i = 0;
i++;
printf("i = %d\n", i);
test();
}
int main(int argc, char **argv)
{
printf("==================segmentation fault test2==================\n");
test();
return 0;
}
第四: 内存越界分析
#include <stdio.h>
int main(int argc, char **argv)
{
printf("==================segmentation fault test3==================\n");
static char arr[5] = {0, 1, 2, 3, 4};
printf("arr[10000] = %d\n", arr[10000]);
return 0;
}
第五:段错误的调试方法
从上面的几个例子中,我们应该对段错误有了一定的认识,但实际项目中,实际中,段错误可能没有上面的例子那么明显看出。如果之前没有这方面的经验,可能一时半会也定位不到问题。
1、使用gdb一步步运行
使用gdb调试,打一些断点、按流程运行下去,运行到段错误的地方会直接提示报错。
或者使用命令行直接gdb调试:
总结:不管是在x86上,还是在ARM上都可以使用gdb的调试方法,将对应错误的地方找出来。
相关文章
- C语言数组
- C语言中一个替换 strcpy的极好的方法
- ZZNUOJ_C语言1117:查找数组元素(完整代码)
- 设计模式的C语言应用-适配及系列模式-第六章
- 一个风骚的C语言操作引起的轩然大波
- C语言使用技巧(三十二):读写txt文件指定行指定所有行类型数据
- C语言使用技巧(二十三):汇总十几种C语言将输出数据或打印的结果保存到文件的方法
- C语言判断大小端的几种方法
- C语言中指针学习方法之优秀
- C语言字符串的复制
- 211051班智科阶段C语言测试题
- (C语言)检测括号是否匹配
- 【数据结构】C语言版本的带哨兵位双向循环链表的快速实现方法
- 【C语言刷题】求矩阵元素平均数并按要求输出结果
- C语言期末试题(附答案)选择题+编程题
- 关于C语言程序