Я пытаюсь реализовать простую программу, используя файл заголовка, где функция в файле заголовка принимает массив int и возвращает массив int.Возвращение массива из функции в C: Ошибка сегментации
header.h
int* point(int a[]);
header.c
#include<stdio.h>
#include "header.h"
int* point(int a[])
{
printf("In the point function\n");
int array[4],i;
for(int i=0;i<4;i++)
{
printf("%dth Iteration\n",i);
array[i]=a[i];
}
return array;
}
test.c
#include<stdio.h>
#include "header.h"
void main()
{
int *array,i;
int a[]={1,2,3,4};
printf("calling point function\n");
array=point(a);
printf("Back in the main function\n");
for(i=0;i<4;i++)
{
//SEGMENTATION FAULT HERE
printf("%d\n",array[i]);
}
}
Я получаю ошибку сегментации в цикле печати в test.c
.
Может ли кто-нибудь помочь?
Массив внутри 'point()' выходит из области действия и уничтожается сразу после возвращения функции. Вместо этого создайте массив в 'main()' и передайте ему указатель в качестве аргумента. – HolyBlackCat
Вы возвращаете адрес массива, созданного в стеке, а затем уничтожаетесь в конце функции. Время жизни массива с именем array слишком короткое. Массив не существует после завершения функции с именем point. –
Создание массива 'int array [4]' создаст этот массив в стеке. Затем вы выходите из метода, вся память, связанная с этим методом, получает вызов (за исключением возвращаемого значения), а возвращаемый указатель указывает на позицию в стеке, которая больше не существует. – Paul