Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с указателями. Ошибка сегментации.

58K
24 августа 2010 года
Agronomchek
8 / / 24.08.2010
Всем доброго времени суток. Сразу скажу, что Си я только начал изучать. Изучаю по книге В.В. Подбельского.
Не могу понять, где именно у меня происходит эта ошибка. Сразу после вывода на экран сообщения "Array of value fx" Windows выдает ошибку и аварийно завершает программу.
Код:
#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");
}


Заранее спасибо откликнувшимся.
397
24 августа 2010 года
SergPas
527 / / 03.02.2007
У Вас несколько ошибок:[FONT=monospace]
[/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]);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог