#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define n 5
#define m 4
float func1(float x,float t)
{
float p=0;
float fac=1,i;
for (i=1;i<=t;i++)
{
fac*=i;
p+=pow(x,i+1)/fac;
}
return p;
}
float func2(float x, float t)
{
float p=0;
int i;
for (i=1;i<=t;i++)
p+=exp(i*x)-sin(x);
return p;
}
float* func(float* mas,int k, int t, int w, int* max)
{
float p;
int i;
float *y=malloc(k*sizeof(float));
if (!y) {printf("Require more memory!"); exit(1);}
for (i=1;i<=k;i++) y[i-1]=func1(mas,t)+func2(mas,w);
p=0;
for (i=1;i<=k;i++)
if (y[i-1]> p) p=y[i-1];
for (i=1;i<=k;i++)
if (p==y[i-1]) *max=i-1;
return y;
}
int main(void)
{
float* x;
int l,k,i;
float* fx;
int*maxpoint;
printf("\nk="); scanf("%d",&k);
x=(float*)malloc(k*sizeof(float));
if (!x) {printf("Require more memory!");
exit(1);}
printf("\nPlease enter %d arguments x\n",k);
for (i=1;i<=k;i++)
{
printf("\nx%d=",i);
scanf("%f",(x+i-1));
}
printf("\nArray of value fx");
fx=func(x,k,n,m,maxpoint);
for (i=1;i<=k;i++)
printf("\n y%d %f",i-1,fx[i-1]);
printf("\nNumber of max arrays's element %d",*maxpoint);
return 0;
system("pause");
}
Работа с указателями. Ошибка сегментации.
Не могу понять, где именно у меня происходит эта ошибка. Сразу после вывода на экран сообщения "Array of value fx" Windows выдает ошибку и аварийно завершает программу.
Код:
Заранее спасибо откликнувшимся.
[/FONT]Во-первых, в функции func() забыли при выделении памяти функцией malloc() преобразовать возвращаемый ею указатель на void* к указателю на float*.
float *y=[COLOR=Red](float*)[/COLOR]malloc(k*sizeof(float));
Во-вторых, если Вы выделяете память, то не забывайте её и освобождать (в вашем случае free).
И, наконец, в-третьих, в функции main() ошибки:
Код:
int main(void)
{
...
int[COLOR=Red]*[/COLOR]maxpoint; [COLOR=Red]//здесь должен быть объект, а не указатель: int maxpoint;[/COLOR]
...
printf("\nArray of value fx");
fx=func(x,k,n,m,[COLOR=Red]&[/COLOR]maxpoint);
...
printf("\nNumber of max arrays's element %d", [COLOR=Red]maxpoint[/COLOR]);
}
{
...
int[COLOR=Red]*[/COLOR]maxpoint; [COLOR=Red]//здесь должен быть объект, а не указатель: int maxpoint;[/COLOR]
...
printf("\nArray of value fx");
fx=func(x,k,n,m,[COLOR=Red]&[/COLOR]maxpoint);
...
printf("\nNumber of max arrays's element %d", [COLOR=Red]maxpoint[/COLOR]);
}