Вы выделяете один элемент слишком мало.Ваш код для удаления ar
никогда не запускается, потому что он следует за возвратом.Вы также пропускаете p
, потому что перезаписываете указатель, возвращенный fib()
.
На вашем месте я бы, вероятно, передал p
в fib()
и получил бы fib()
для заполнения массива.
void fib(int n, int p[])
{
p[0] = 1;
p[1] = 1;
for (int i=2; i<=n; i++)
p[i] = p[i-2]+p[i-1];
}
Очевидно, что этот код требует n>=2
, но я оставлю проверку ошибок в качестве упражнения для читателя!
Для вызова этого кода используйте такой код:
int p[] = new int[count];
fib(count, p);
Если вы хотите распечатать значения между i1 и i2, скажем, сделайте это так:
for (int i=i1, i<=i2, i++)
std::cout<<p[i]<<std::endl;
Поскольку вы используете C ++, весь этот код будет проще с векторным классом C ++.