• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы agronomchek
  • Дата начала
A

agronomchek

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

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

Собственно,
Код:
#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;
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!