码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 我终于体会到了:代码竟然不可以运行,为什么呢?代码竟然可以运行,为什么呢?


    废话不多说,直接上图

    初看只当是段子,再看已是段中人

    事情经过:

    我在写动态顺序表的尾插函数时,写出了如下代码,可以跑,但是这段代码有一个bug暂时先不提

    1. //动态顺序表的尾插
    2. void SLPushBack(SL* psl, SLDataType x)
    3. {
    4. if (psl->size == psl->capacity)
    5. {
    6. SLDataType* p = (SLDataType*)realloc(psl->a, psl->capacity == 0 ? 4 : 2 * psl->capacity);
    7. //int newcapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;
    8. //SLDataType* p = (SLDataType*)realloc(psl->a, newcapacity * sizeof(SLDataType));
    9. if (p == NULL)
    10. {
    11. perror("realloc fail");
    12. exit(-1);
    13. }
    14. else
    15. {
    16. psl->a = p;
    17. //psl->capacity = newcapacity;
    18. }
    19. }
    20. psl->a[psl->size++] = x;
    21. }

    后来,为了增加代码的可读性,又改为了以下代码,结果发现居然不能跑?!

    1. //动态顺序表的尾插
    2. void SLPushBack(SL* psl, SLDataType x)
    3. {
    4. if (psl->size == psl->capacity)
    5. {
    6. //SLDataType* p = (SLDataType*)realloc(psl->a, psl->capacity == 0 ? 4 : 2 * psl->capacity);
    7. int newcapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;
    8. SLDataType* p = (SLDataType*)realloc(psl->a, newcapacity);
    9. if (p == NULL)
    10. {
    11. perror("realloc fail");
    12. exit(-1);
    13. }
    14. else
    15. {
    16. psl->a = p;
    17. psl->capacity = newcapacity;
    18. }
    19. }
    20. psl->a[psl->size++] = x;
    21. }

    经过调试发现问题是出现在realloc扩容函数,扩容大小不对

    SLDataType* p = (SLDataType*)realloc(psl->a, newcapacity)

    改为:SLDataType* p = (SLDataType*)realloc(psl->a, newcapacity * sizeof(SLDataType))

    OK,改完之后确实能跑了。随后我就想第一个代码为什么能跑?第一个代码的扩容大小也不对呀,为什么能跑呢?

    其第三行正确的应该改为:

    SLDataType* p = (SLDataType*)realloc(psl->a, psl->capacity == 0 ? 4 : 2 * psl->capacity * sizeof(SLDataType));

    经过大量测试,反正第一个代码就是能跑,不知道什么原因。最后归结为是VS编译器的偶然性Bug,因为我又在DEV编译器上试了一下,第一个代码是跑不了的。

    总结:写代码需要小心谨慎和大量测试,不然如果程序出现了Bug还能跑,我们是很难发现这个Bug的。如果开发项目时出现这种情况,程序的Bug就是一个潜在的隐患,如果某一天该Bug突然导致程序崩溃,那么我们是很难找到问题原因的。

  • 相关阅读:
    Calico 网络故障排查 calico/node is not ready: BIRD is not ready(指定Calico匹配网桥规则)
    【C++】智能指针:auto_ptr、unique_ptr、share_ptr、weak_ptr(技术介绍 + 代码实现)(待更新)
    微信小程序渲染的富文本里面除了img标签外什么都没有,该如何设置img的大小
    中国模式识别与计算机视觉大会|多模态模型及图像安全的探索及成果
    JavaScript 中的高阶函数
    Mapper代理开发
    如何用蓝牙实现无线定位(一)--系统原理
    摄影网页设计制作 简单静态HTML网页作品 WEB静态摄影网站作业成品 学生DW摄影网站模板
    利用在线培训系统提升员工技能,助力企业发展
    A-Level 化学例题解析及练习Atomic Structure
  • 原文地址:https://blog.csdn.net/2301_76197086/article/details/134488917
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号