Ошибка 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.