我正在研究一个简单的软调制解调器程序。调制解调器旨在实现拨号调制解调器的音频 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 也有一个有效的地址,直到循环的第二次迭代,此时它变为 0 (NULL)。这里是调用函数的地方。DEFAULT_PHASE = 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;
}
在考虑了所有建议的编辑后,我能够解决我的代码中的问题,非常感谢你给我的任何帮助。