You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数中该代码是否会产生内存泄漏?

关于这段C++代码的内存泄漏问题解答
  • 这段代码肯定会造成内存泄漏。new object()会在堆上分配内存存储object对象,并把内存地址赋值给指针x。但直接将x设为nullptr后,程序丢失了这块堆内存的唯一引用,又没有调用delete x释放内存,操作系统无法自动回收这块内存(只有程序结束后才会被回收,运行期间始终被占用,属于内存泄漏)。

  • 局部作用域只会自动销毁指针变量x本身(它是栈上的局部变量),但它指向的堆内存不会被自动释放。C++中只有栈上的局部变量会在作用域结束时自动销毁,堆内存必须通过delete(或delete[])手动释放,否则必然泄漏。

  • 测试方法:

    • 简单手动测试:给someClass添加构造和析构函数并打印日志,比如:
      #include <iostream>
      class someClass {
      public:
          someClass() { std::cout << "someClass 构造" << std::endl; }
          ~someClass() { std::cout << "someClass 析构" << std::endl; }
      };
      
      运行你的代码后,如果只看到构造日志,没看到析构日志,就说明对象未被销毁,存在内存泄漏。
    • 专业工具测试:Linux下用valgrind --leak-check=full ./你的程序,它会精准报告泄漏的内存位置和大小;Windows下可以用Visual Studio内置的内存检测工具,开启后运行程序,输出窗口会显示泄漏详情。

内容的提问来源于stack exchange,提问作者zbrusko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:11:16