ヘッダファイルの関数が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