※ ChatGPTを利用し、要約された質問です(原文:*fa=(*func)(*ax))
*fa=(*func)(*ax);の実行でSegmentation faultが発生する理由
このQ&Aのポイント
プログラムtest2.cでvalue=(*func)(*ax)という処理が正常に実行された結果、期待する答え225.0を得ることができました。
しかし、test3.cで*fa=(*func)(*ax)という処理を行ったところ、Segmentation fault(セグメンテーションフォルト)が発生しました。
test3.cの*fa=(*func)(*ax)は、関数mnbrakの定義内の記述に従っていますが、なぜエラーが発生するのでしょうか。
何度もすみません.
次のようなプログラムtest2.cを作成してみました.
/* test2.c */
#include <stdio.h>
float quad(float alf)
{
float z;
z=(10.0+alf*5.0)*(10.0+alf*5.0);
return z;
}
int main()
{
float* ax;
float value;
float* fa;
float alpha;
float (*func)(float);
alpha=1.0;
ax=α
fa=&value;
func=quad;
value=(*func)(*ax);
printf("value=%f\n",value);
printf("*fa=%f\n",*fa);
return 0;
}
これについては,先ほどのBLUEPIXYさんに助けられて,期待する答え225.0を得ることができました.
そこで今度は「value=(*func)(*ax);」を「*fa=(*func)(*ax);」に変えて,test3.cを作成して実行したところ,「Segmentation fault」となりました.以下はtetst3.cです.
/* test3.c */
#include <stdio.h>
float quad(float alf)
{
float z;
z=(10.0+alf*5.0)*(10.0+alf*5.0);
return z;
}
int main()
{
float* ax;
float* fa;
float alpha;
float (*func)(float);
alpha=1.0;
ax=α
func=quad;
*fa=(*func)(*ax);
printf("*fa=%f\n",*fa);
return 0;
}
test3.cの「*fa=(*func)(*ax);」は,「Numerical Recipes in C」に記載の関数mnbrakの定義内の記述に従ったのですが,何がいけないのでしょうか.よろしくお願いいたします.
お礼
早速のご回答ありがとうございました. 確かに,mainの中に, float value;と fa=&value; を追加すると,正常に走って,期待する答えを得ることができました. ポインタfaを使用すれば,もはやvalueという変数は持出す必要はないと思っていました. 大変勉強になりました.重ねてありがとうございました.