代码段中的内存泄漏

Sev*_*ess 0 c++ memory-leaks

我试图粉碎我的C++.我把一个简单的程序拼凑起来找到带有记忆的斐波那契序列.有一个内存泄漏,我似乎无法弄清楚为什么.泄漏在Fibonacci :: setToFind中报告.

很抱歉长代码块,但我无法弄清楚如何制作一个更小的可重现的例子.

#include <iostream>

class Fibonacci
{
public:
    int m_valuefound;
    int m_tofind;
    long int *m_memo;

    int findValue(int value){
        if (m_memo[value] == 0) {
            if (value == 0 || value == 1) {
                m_memo[value] = 1;
            } else {
                m_memo[value] = findValue(value-1) + findValue(value-2);
            }
        }
        return m_memo[value];
    }

    void setToFind(int value){
        m_tofind = value;
        m_memo = new long int[value];

        std::fill_n(m_memo,value,0);
    }

    void solve(){

        int value = m_tofind;
        int result = findValue(value);

        std::cout<< "Value is: " << result << std::endl;
    }

    ~Fibonacci(){};


};

int main (int argc, char * const argv[]) {
    std::cout << "Enter integer values until you'd like to quit.  Enter 0 to quit:";

    int user_ind=0;

    // for testing non-interactivly
    while(true){
    for (user_ind=1; user_ind<45; user_ind++) {
        Fibonacci *test = new Fibonacci;
        test->setToFind(user_ind);
        test->solve();
            delete test;
    }

    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Rya*_*yan 5

你永远不会m_memo在析构函数中删除Fibonacci.

由于您将m_memo分配为数组,因此应删除 delete[] m_memo