none
一个c plus内存泄漏问题 RRS feed

  • 问题


  • class A
    {
    public :
        A();
        ~A();
        const vector<B> & get();
    }
    
    // 多余代码略去
    vector<B> & A::get()
    {
        vector<B> *v_data = new vector<B>();
        B *b_data = new B();
        v_data->push_back(*b_data);
        delete b_data;
        return *v_data;
    }
    
    int main()
    {
      A *a = new A();
      vector<B> *vec_b = new vector<B>();
      *vec_b = a->get();
      vec_b->clear();
      delete vec_b;
      delete a;
      return 0;
    }

    以上代码比较粗略,但大致过程如此,在类的成员函数get()中new出来的vector数据,按理来说应该存在堆空间里,我自行外部delete回收,但用Visual Leak Detector测试后,还是提示这个get()函数内存泄漏,这是为什么?谢谢



    • 已编辑 c0ff 2013年6月19日 9:28
    2013年6月19日 9:26

答案

  • 您的get函数返回是的引用,在get函数中您new的v_data指针并没有delete掉。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 c0ff 2013年6月20日 6:30
    2013年6月20日 2:23
    版主

全部回复

  • 您的get函数返回是的引用,在get函数中您new的v_data指针并没有delete掉。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 c0ff 2013年6月20日 6:30
    2013年6月20日 2:23
    版主
  • 嗯,我试了下,将返回类型改为指针就没问题了,谢谢:)
    2013年6月20日 6:32