IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【例题分享】一道C语言易错题的解决思路 -> 正文阅读

[C++知识库]【例题分享】一道C语言易错题的解决思路

目录

一.例题

二.解题思路

三.底层逻辑?


一.例题

求下面代码的运行结果

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

二.解题思路

看到题目,我相信大部分人的答案都是循环12次打印 hello world? 。那么我们放到VS编译器下运行看看答案是不是和我们所想一样。

?。?如图所示,我们并没有得到12个hello world 。程序视乎是陷入了死循环,一直在打印hello world 。那么究竟是什么原因导致程序陷入死循环呢,我们可以一步一步调试来寻找错误

当代码运行到这一步时,我们可以清晰的看到数组arr和i都成功创建并初始化。

??当i=9时,我们发现数组已经全部被改为0了,如果我们继续让代码运行下去的话,毫无疑问,数组必然越界访问。

?当我们继续运行代码后,我们在监视窗口可以看到即使越界访问arr[10]arr[11]依然被我们改成0了,这是因为当数组越界访问时,arr[10]表示数组最后一个元素的后一个地址,我们继续让代码运行下去。

我们可以很轻易的发现,当i=12时,继续运行代码时,i和arr[12]一起被修改成了0,显然,问题就是出在了这里。那么究竟是什么原因导致i和arr[12]一起被修改呢??

?

我们在监视里通过&i,&arr[12]获取到了i和arr[12]的地址,发现他们的地址竟然是一样的,那就说明在这串代码中,当数组arr越界访问后获取到了i的地址,因此当arr[12]修改为0时,i也同时被修改为0。因此程序陷入了死循环之中。

三.底层逻辑?

内存主要分为三大块区域,分别是栈区、堆区、静态区。

栈区主要存放局部变量,堆区主要用于动态内存的分配(比如malloc申请的区域)?,静态区主要用来存储静态数据、全局数据、常量。?

在本题中我们要知道:

1.局部变量是存放在栈区的,因此i和arr数组都是在栈区开辟内存。

2.我们要了解栈这种数据结构,栈的特点是先进后出、后进先出,它的使用顺序是先使用高地址再使用低地址。

3.数组的开辟是由低地址向高地址逐步递增的。

?

?经过测试,在不同编译器下,i和arr之间的空白内存区域是不一样的,在VS编译器下,i开辟后是隔两个整形空间再开辟arr的内存空间,而在VC6.0中,i和arr数组之间仅有一个空白的内存空间。

希望这道例题能够对你有所帮助,感谢你的观看!?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:25:04  更:2022-08-06 10:25:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 17:59:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码