Ошибка EXC_BAD_ACCESS - C (СИ)
Формулировка задачи:
Здравствуйте.
Программа по идее должна удалять элементы которые меньше корня из произведения двух соседних. Но она недоработана. При n=4 выдает ошибку к 20 строке
.
Может пояснить кто-нибудь, в чем эта ошибка заключается ?
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int i,f,n,k,b,q,x,v,q1; b=v=0; x=2; double a[n]; scanf ("%d", &n); f=n; FILE *fp=fopen("a.txt", "r"); for (i=1; i<=n; i++) { fscanf(fp, "%lf", a+i); } for(k=2;k<n;k++) { if(a[k]<pow(a[k-1]*a[k+1],0.5)) { f--; b++; if(k+1==n) { for(q=x; q<n; q++) { a[q]=a[q+1]; } return f; } else continue; } else { v++; if(b>0) { for(q1=v+1;q1<n;q1++) { a[q1]=a[q1+1]; } } x++; b=0; } } }
Thread 1: EXC_BAD_ACCESS(code=EXC_I386_GPFLT)
Решение задачи: «Ошибка EXC_BAD_ACCESS»
textual
Листинг программы
double *a = NULL; int n, i; scanf("%d", &n); a = calloc(n, sizeof(*a)); if(NULL == a) { fputs("error : no memory", stderr); exit(-1); } for(i = 0; i < n; ++i) { a[i] = i; } free(a);
Объяснение кода листинга программы
- Объявлены две переменные:
a
типаdouble*
иn
типаint
. - С помощью функции
scanf
в переменнуюn
считывается число, которое будет использоваться для выделения памяти под массив. - С помощью функции
calloc
в переменнуюa
выделяется память под массивn
элементов типаdouble
. - Если выделение памяти не удалось (функция
calloc
вернулаNULL
), то выводится сообщение об ошибке и программа завершается. - Если выделение памяти удалось, то выполняется цикл
for
, в котором каждый элемент массиваa
инициализируется значениемi
. - После окончания цикла массив
a
освобождается с помощью функцииfree
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д