Я пишу код для вычисления суммы значений фибоначчи до n, как хранится в массиве. Для некоторых значений n я получаю ошибку при вызове free().Ошибка при освобождении памяти
Редактировать: Код должен теперь компилироваться.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
long fib(long *fibs, int n);
int main(int argc, char *argv[]) {
long num, sum;
long n;
long *fibs;
if(argc < 2) {
printf("Usage %s n\n", argv[0]);
exit(EXIT_SUCCESS);
}
n = strtol(argv[1], NULL, 10);
printf("%ld\n", n);
printf("--Allocating memory\n");
fibs = (long *) malloc(sizeof(long) * n);
printf("--Memory allocated\n");
fibs[0] = 1;
fibs[1] = 1;
sum = 0;
for(int i = 0; i <= n; i++) {
num = fib(fibs, i);
sum += num;
printf("%ld\n", num);
}
printf("%ld\n", sum);
printf("--Freeing memory\n");
free(fibs);
printf("--Memory freed\n");
}
long fib(long *fibs, int n) {
if((n == 0) || (n == 1)) {
return 1;
}
fibs[n] = fibs[n - 1] + fibs[n - 2];
return fibs[n];
}
Например, когда я вызываю программу ./fibsum с n = 5, я получаю дамп ядра.
Что такое 'n' в основном? пожалуйста, напишите минимальный компилируемый код, есть так много проблем в вашем коде –
должно быть
Не бросайте возврат malloc. И вы должны инициализировать фибры при объявлении. Также это не объявляет, поэтому я не уверен, как он компилируется –