当前位置: 首页 > web >正文

编程常见错误归类

上一篇讲了调试,今天通过一个举例回忆一下上一篇内容吧!

1. 回顾:调试举例

在VS2022、X86、Debug的环境下,编译器不做任何优化的话,下⾯代码执⾏的结果是啥?

#include <stdio.h>
int main()
{int i = 0;int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//0~9for (i = 0; i <= 12; i++){arr[i] = 0;printf("hehe\n");}return 0;
}

陷入循环

调试观察问题:

会发现 arr 和 i 的值一模一样,则我们对其取地址观察:

发现地址是一样的,所以是在这里出现了问题。

1.栈区内存的使⽤习惯是从⾼地址向 低地址使⽤的,所以变量i的地址是 较⼤的。arr数组的地址整体是⼩ 于i的地址。

2.数组在内存中存储的时候的特点:随着下标的增长,数组的地址是由低到高变化的。 

所以根据代码,就能理解为什么是左 边的代码布局了。

如果是左边的内存布局,那随着数组下标的增⻓,往后越界就有可能覆盖到i,这样就可能造成循环的。

这⾥为什么 i 和 arr 数组之间恰好空出来2个整型的空间呢?这⾥确实是巧合,在不同的编译 器下可能中间的空出的空间⼤⼩是不⼀样的,代码中这些变量内存的分配 和地址分配是编译器指定的,所以的 不同的编译器之间就有差异了。所以这个题⽬是和环境相关的。

所以代码要进行以下修改:

所以,只有调试才能观察到程序内部执⾏的细节,就像医⽣给病⼈做B超,CT⼀样。

注意:栈区的默认的使⽤习惯是先使⽤⾼地址,再使⽤低地址的空间,但是这个具体还是要编译器的 实现。

⽐如: 在VS上切换到X64,这个使⽤的顺序就是相反的,在Release版本的程序中,这个使⽤的顺序也是相反的。

(在运行时,如果进入函数没有数组的全部内容,则需要输入数组名+“,(查看的数组个数)”

调试过程中,要做到⼼中有数,也就是程序员⾃⼰⼼⾥要清晰的知道希望代码怎么执⾏,然后再去看 代码有没有按照我们预定的路线在执⾏。

调试是需要反复去动⼿练习的,调试是可以增加程序员对代码的理解和掌控的,掌握了调试的能⼒, 就能看到本质,就像能给程序做B超⼀样,对程序内部⼀览⽆余。

2. 编译型错误

编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝⻢迹的,双击错误信息也 能初步的跳转到代码错误的地⽅或者附近。编译错误,随着语⾔的熟练掌握,会越来越少,也容易解决。

3.链接型错误

看错误提⽰信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。⼀般是因为 :

标识符名不存在

拼写错误

头⽂件没包含

引⽤的库不存在

4.运行错误

 运⾏时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运⾏时问题。

(学习内容无偿分享,各位大佬觉得有帮助的话,三连哈,就是对我最大的支持!)

 

http://www.xdnf.cn/news/319.html

相关文章:

  • keil5软件配置以及使用技巧
  • QML 自定义控件指南
  • 【dify实战】chatflow结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载
  • 阿里AI模型获FDA“突破性”认证,胰腺癌早筛实现关键突破|近屿智能邀你入局AIGC大模型
  • SSM省市区三级联动和三表联查附带数据库
  • Transformer :Encoder vs Decoder
  • SAP赋能玩具行业:数字化转型中的创新与增长
  • 梯度下降,共轭梯度,牛顿法,拟牛顿法的收敛速度对比
  • Linux:线程的同步与互斥(生产者消费者模型的demo)
  • ESORICS 2025截稿延期
  • java并发编程-ForkJoinPool
  • fastdds:传输层SHM和DATA-SHARING的区别
  • I2C嵌入式开发实战指南:从入门到精通
  • 一级指针的介绍
  • python进阶: 深入了解调试利器 Pdb
  • 第R3周:RNN-心脏病预测
  • namesapce、cgroup
  • kubeadm极速部署Kubernetes 1.26.X 版本集群
  • AI语音助手 React 组件使用js-audio-recorder实现,将获取到的语音转成base64发送给后端,后端接口返回文本内容
  • 【学习笔记】文件上传漏洞--黑白盒审计
  • 数字友好战略视域下数字安全核心要素的理论解构与实践路径
  • 2022年世界青年科学家峰会-高端装备系统动力学与智能诊断维护学术研讨会
  • Java之this关键字
  • CTF--MD5
  • 慢速率拉伸热变形工艺试验机
  • 关于模拟噪声分析的11个误区
  • Dify快速入门之基于知识库构建聊天机器人
  • 汽车免拆诊断案例 | 2019款大众途观L车鼓风机偶尔不工作
  • 在浏览器中输入 URL 到页面加载完成都做了什么
  • 【含文档+PPT+源码】基于python爬虫的豆瓣电影、音乐、图书数据分析系统