В настоящее время я просматриваю проблему с фибоначчи на хакерранке, и у меня ошибка повреждения памяти malloc. Это ссылка на проблему я делаю:C++ malloc(): Повреждение памяти
https://www.hackerrank.com/contests/programming-interview-questions/challenges/fibonacci-returns/
Input 0-10, каждое число разделенных новой строки. Для каждого ввода печатается значение в этой точке последовательности. Он работает для небольших входов, но после 6 он получает ошибку malloc. Кажется, что размер последовательности не является проблемой, сколько всего сделано подряд.
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> bigFib(1);
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int x;
while(cin >> x){
if(bigFib.size()-1 >= x){
cout << bigFib[x] << endl;
}
else{
vector<int> fib(x);
fib[0] = 0;
fib[1] = 1;
for(int j = 2; j <= x; j++){
fib[j] = fib[j-1] + fib[j-2];
}
bigFib = fib;
cout << fib[x] << endl;
}
}
return 0;
}
Я довольно новичок в C++ и не могу найти проблему. Спасибо за ваше время.
Вы, вероятно, запись в память, которая из ваших границ. –
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
'vector fib (x)' выделяет вектор элементов 'x', проиндексированных' 0..x-1'. Условием завершения цикла является 'j <= x', что означает, что как только вы попытаетесь сделать' fib [x] ' –