Не возвращается значение указателя из функции.

Тема в разделе "C/C++/C#", создана пользователем agronomchek, 29 авг 2010.

  1. agronomchek

    agronomchek Гость

    Подробное описание задания:
    В программе описать 3 функции.
    Функция f1 осуществляет ввод m-размера одномерного массива, а-значений элементов массива (предварительно под массив в теле функции динамически выделяется память), передает в главную m и a, i=1,...m.
    Функция f2, получая через параметры одномерный массив, динамически выделяет память под новый массив (инвертируемый исходный) и передает в точку вызова новый массив. Тип возвращаемого функцией значения - void.
    Главная функция получает размер массива и значения его элементов через f1, вызывает f2 и выводит на экран элементы нового массива, полученные как разности элементов исходного массива и инвертированного.

    Проблема: Из главной функции указатель inv передается в функцию f2, там он становится массивом. Этот массив должен "вернуться" в главную функцию. Но при попытке обращения к этому указателю после f2 вылетает ошибка сегментации.

    Собственно,
    Код (Text):
    #include <stdio.h>
    #include <stdlib.h>

    float *f1(int* m)
    {
    int size = 0,i; float *a;
    printf("\nPlease enter m - size of array: ");
    scanf("%d", &size);
    a = (float*)(malloc(size*sizeof(float)));
    if (a)
    {
    for (i = 0; i < size; ++i)
    {
    printf("\n Enter a[%d]= ",i);
    scanf("%f", &a[i]);
    }
    *m = size;
    }
    else {*m = 0;}
    return a;
    }


    void f2 (float *mas,float *inv, int k)
    {
    int i;
    inv=(float*)malloc(k*sizeof(float));
    if (!inv)
    {
    printf("\nRequire more memory!\n");
    system("pause");
    exit(1);
    }
    for (i=0; i<k; i++) inv[i]=mas[k-i-1];
    }

    int main(void)
    {
    int m, i; float *inv=NULL; float *mas=NULL; float x;
    mas=f1(&m);
    f2(mas, inv, m);
    printf("\n Difference between elements of direct and reverse arrays: ");
    for (i=0; i<m; i++)
    {
    if (i%3==0) printf("\n");
    x=mas[i]-inv[i];
    printf("mas[%d]= %f\t", i, x);
    }
    free(inv);
    free(mas);
    system("pause");
    return 0;
    }
     
  2. agronomchek

    agronomchek Гость

    Проблему решил.
     
  3. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    Ну так опубликуйте. Всем будет полезно.
     
Загрузка...

Поделиться этой страницей