gpt4 book ai didi

c - 返回指向数组的指针的函数中的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:34 25 4
gpt4 key购买 nike

我正在开发一个简单的软调制解调器程序。该调制解调器旨在实现拨号调制解调器的音频 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)。这里是函数被调用的地方。默认_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;
}

在考虑了所有建议的编辑后,我能够解决我的代码中的问题,非常感谢您给我的任何帮助。

最佳答案

编辑添加了另一点。

第 1 期

您正在为 5 个元素分配足够的内存(numberOfElements 为 5)。然后您尝试从初始点开始打印 10 个元素。最后 5 个元素将访问未分配的空间,并可能导致未定义的行为。包括段错误。

第 2 期

您释放的不是指向已分配空间的指针,而是 10 位之后的位置。如果解决段错误,这也会导致其他问题。

第 3 期

这是次要问题之一。但是 sine_ptr 是 double,并且试图将其显示为 int 是未定义的。 将导致编译器警告。即使有警告,数字也很低。在您的情况下,输出将全为零。要查看正确的结果,请使用 %lf

使用下面的代码。

int main()
{
int i;
int numElements = 5;
double* sine_ptr = generate_sine( numElements, 0.5, DEFAULT_PHASE, 440 );
for( i=0; i<numElements; i++)
{
printf( "%lf \n", *(sine_ptr + i) );
}
free(sine_ptr);
return 0;
}

关于c - 返回指向数组的指针的函数中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14169497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com