私は単純なソフトモデムプログラムに取り組んでいます。モデムは、ダイヤルアップ モデムのオーディオ FSK を実装するように設計されており、DTMF トーンを発することによって電話を開始できる必要があります。現在、正弦値を生成する関数に問題があります。
double* generate_sine( int numberOfElements, double amplitude,
double phase_in_degrees, double numberOfCycles)
{
static int i;
double *sine_output;
sine_output = malloc( numberOfElements*sizeof(double) );
for( i=0; i<numberOfElements; i++ )
{
sine_output[i] = (amplitude*sin(( (2.0*M_PI*i*numberOfCycles)/(double)numberOfElements )+
((M_PI*phase_in_degrees)/180 )));
}
return sine_output;
}
関数にセグメンテーション エラーがあります。変数 "i" は、ループの最初の繰り返しの後、ポインターになるように見えます。その値は 4206692 です。sine_ptr も、ループの 2 回目の繰り返しで 0 (NULL) になるまで有効なアドレスを持ちます。ここで関数が呼び出されます。デフォルト_フェーズ = 0.0
int main()
{
int i;
int numElements = 10;
double* sine_ptr = generate_sine( numElements, 0.5, DEFAULT_PHASE, 440 );
for( i=0; i<numElements; i++)
{
printf( "%e \n", *(sine_ptr + i ) );
}
free(sine_ptr);
return 0;
}
提案されたすべての編集を考慮した後、コードの問題を解決することができました。あなたがくれた助けに感謝します。