Я пытаюсь отключить свой 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;
}
Я не вижу 'delete [] m_memo' в любом месте кода. –
protip: Не используйте указатели. Если m_memo был вектором или deque, и вы написали 'Fibonacci test' вместо теста в качестве указателя, у вас никогда не было бы утечки – 2013-05-01 18:58:11
@ShafikYaghmour Nitpicking, но я думаю, что это должно быть' delete [] m_memo'. –