当我编译这段代码时发生错误C6308,说realloc可以返回NULL,并且可能导致内存泄漏

2023-11-30

void inf_int:: Sub(const char num, const unsigned int index)    
    {
        if (this->length < index) {
            this->digits = (char*)realloc(this->digits, index + 1);     
            if (this->digits == NULL) {     
                cout << "Memory reallocation failed, the program will terminate." << endl;
    
                exit(0);
            }
    
            this->length = index;                   
            this->digits[this->length] = '\0';
        }
    
        if (this->digits[index - 1] < '0') {    
            this->digits[index - 1] = '0';
        }
    
        this->digits[index - 1] -= num - '0';   
        if (this->digits[index - 1] < '0') {    
            this->digits[index - 1] += 10;  
            Sub('1', index + 1);            
        }
    }

在第四行中,编译器返回错误,realloc 可以返回 null。我添加了第五行 if 为了处理这种情况,并在这种情况下退出程序,但它似乎不起作用。有人可以给我任何关于如何解决这个问题的指示吗?谢谢。


功能realloc在这种情况下可以返回空指针,如果将函数调用的返回值分配给初始指针,则先前分配的内存的地址将丢失。您需要使用中间指针,例如

        char *tmp = (char*)realloc(this->digits, index + 1);     
        if (tmp == NULL) {     
            cout << "Memory reallocation failed, the program will terminate." << endl;
            // free( this->digits ); provided that the destructor does not call free itself
            exit(0);
        }

        this->digits = tmp;
        //...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我编译这段代码时发生错误C6308,说realloc可以返回NULL,并且可能导致内存泄漏 的相关文章

随机推荐

  • 谷歌导航意图

    我正在尝试直接从我的应用程序启动 Google 导航 以便它可以将我从起始地址导航到目标地址 因此 我有起始地址和目的地地址的纬度和经度坐标 并希望获得这些坐标的导航 但我不知道如何提供起始地址 导航仅使用我的 GPS 来获取我当前的信息
  • Swift webview xcode 发布数据

    我有一个网络视图 当前编码如下 let url NSURL string http example com let request NSURLRequest URL url monitorView loadRequest request 这
  • 列出 AWS .NET SDK 中的实例

    我正在编写代码以使用适用于 AWS 的 net SDK 列出实例 ID 和实例类型 我知道我需要使用DescribeInstancesRequest 类 我还认为我需要使用 ArrayList 来存储字符串输出和 foreach 循环来获取
  • 在单个产品页面上显示类别和品牌名称

    在 Woocommerce 中 我正在使用YITH WooCommerce 品牌插件处理产品品牌 我目前正在努力解决 WooCommerce 中我的简短描述下想要的固定文本 我想动态显示产品名称在那段文字中 有效 也是产品类别名称 CATE
  • SVN中的结果代码是什么意思?

    SVN中的结果代码是什么意思 我需要一个快速参考 有关更多详细信息 请参阅 SVNBook 工作副本文件和目录的状态 常见状态 U 工作文件已更新 G 存储库上的更改会自动合并到工作副本中 M 工作副本已修改 C 该文件与repo中的版本冲
  • CMake - 使用错误数量的参数调用 add_executable

    我正在尝试组织一个 C 项目 该项目开始有很多文件 我想创建两个使用 Cmake 共享一些源文件的可执行文件 我在这里发现了一个有趣的过程 如何将源文件添加到另一个文件夹中 以下是我的版本 file GLOB Common sources
  • Google 地图 API 无法绘制不同大陆

    我已经使用谷歌地图 API 在谷歌地图上绘制了一个路径点 我参考了以下页面 https developers google com maps documentation javascript directions 在路线部分中使用航点 并对
  • 如何更改指向已删除的 android-ndk-r9 安装的内置 C/C++ 路径?

    我最近将 NDK 从 android ndk r9 升级到 android ndk r10 确切地说是 r10d Eclipse 是 4 4 Luna Luna 服务版本 1 4 4 1 构建 ID 20140925 1800 Eclips
  • XDocument 获取 XML 文件的一部分

    我有一个很大的 xml 文件 想要获取指定数量的
  • 数组初始化的差异

    在查看源文件时 我看到了两种数组初始化的方法 我想知道之间有什么区别 int value new int 0 and int value next new int 其实没有什么区别 它是Syntactic sugar在java数组声明中 第
  • PHP正则表达式最后一次出现的单词

    我的字符串是 var www domain com public html foo bar folder another 我想从此字符串中删除根文件夹 以仅获取公共文件夹 因为某些服务器内部有多个网站 我的实际正则表达式是 www publ
  • 将文本与 a 标签的底部对齐

    如何将文本置于 li 内的 a 标签的底部 这是我的代码 div ul li a href ter a li li a href redg a li li a href ryer More a li li a href More a li
  • VSCode 中多命令的快捷方式

    我有一个现有的快捷方式可以最大化终端窗口 key ctrl command workbench action toggleMaximizedPanel 我想在快捷方式中添加一个附加命令 以便在终端窗口最大化时将焦点转移到终端窗口 在最小化时
  • 测试两个函数变量是否指向同一个函数?

    如何测试两个函数变量是否指向同一个函数 test lm test2 lm test lm error comparison 1 is possible only for atomic and list types test test2 er
  • MVC 剃刀@foreach

    我听说在视图中使用 foreach 是禁忌 意思是 视图中不应该有任何逻辑 foreach 的逻辑应该位于何处的最佳实践是什么 foreach foreach 的逻辑应该位于何处的最佳实践是什么 无处可去 只能摆脱它 您可以使用编辑器或显示
  • BlackBerry - 如何在 Android 中传递 Intent.putExtra() 等数据

    我是黑莓手机的新手 我如何实现 在黑莓手机中 与 Android 相同的功能 intent putExtra key value 将可以接收到的值放在下一个推屏在黑莓手机中 就像在 Android 中一样ActivityOne Intent
  • 有没有办法访问iphone/ipad(真机,无模拟器)中的文档文件夹?

    有没有办法访问真实设备 iphone ipad 文档文件夹 我意识到一个应用程序在该文件夹中存储了一些数据 我想检查一切是否都以正确的方式进行 即使文件位于沙盒中文档之外的其他位置 您也可以在没有 iTunes 的情况下执行此操作 转到 X
  • “出于安全原因,proc_open() 已被禁用”- PHP 错误

    出于安全原因 proc open 已被禁用 我目前使用免费托管 Hostinger 制作一个仅供我和其他人使用的个人网站 我知道我应该删除proc open来自php ini但由于我的共享托管计划 我无法访问它 周围的代码proc open
  • 为什么 Inno Setup 忽略 DefaultDirName

    运行 Inno Setup 5 5 6 我更正了我的错误默认目录名值 但无论我做什么 程序都会继续尝试安装在旧的错误位置 即使我将其设置为与示例之一匹配的值 DefaultDirName pf My Program 程序继续选择旧的 不正确
  • 当我编译这段代码时发生错误C6308,说realloc可以返回NULL,并且可能导致内存泄漏

    void inf int Sub const char num const unsigned int index if this gt length lt index this gt digits char realloc this gt