Ich versuche, ein einfaches Programm mit einer Header-Datei zu implementieren, wo eine Funktion in der Header-Datei ein int-Array akzeptiert und auch ein int-Array zurückgibt.Rückgabe eines Arrays von einer Funktion in C: Segmentierung Fehler
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]);
}
}
ich an der Druckschleife in test.c
einen Segmentation Fault bin immer.
Kann jemand helfen?
Das Array innerhalb des 'point()' geht außerhalb des Bereichs und wird zerstört, sobald die Funktion zurückkehrt. Erstellen Sie stattdessen das Array in 'main()' und übergeben Sie ihm einen Zeiger als Argument. – HolyBlackCat
Sie geben die Adresse eines Arrays zurück, das auf dem Stapel erstellt und dann am Ende der Funktion zerstört wurde. Die Lebensdauer des Arrays namens array ist zu kurz. Das Array existiert nicht, nachdem die Funktion namens point abgeschlossen wurde. –
Das Erstellen eines 'int array [4]' erstellt dieses Array auf dem Stack. Wenn Sie die Methode beenden, geht der gesamte mit diesem Methodenaufruf verknüpfte Speicher verloren (mit Ausnahme des zurückgegebenen Werts), und der zurückgegebene Zeiger zeigt auf eine Position auf dem Stapel, die nicht mehr vorhanden ist. – Paul