C中高斯方程段错误的未知原因
Unknown cause for Segfault in Gaussian Equation in C
我目前正在制作一个近似薛定谔方程的程序,对于我的初始条件,我的教授说要从高斯开始。我为此使用的公式是这样的(抱歉,我不知道如何在降价中做方程式):
p(x) = ( 1/sqrt(2 * PI) ) * e^( -1/2 * (x-u)^2 / o )
为了简单起见,我从 u=0 和 o=1 开始,所以我在我的程序中使用它的方式是这样的:
double gaussian(double x) {
return (1/sqrt(2*M_PI)) * exp((-.5) * pow(x, 2));
}
void initial_conditions(int m, complex *values[], double dx) {
for (size_t i = 0; i < m; i++)
{
values[i]->real = gaussian(i * dx);
}
}
编译:gcc project1.c -lm -o project1
但是每次我 运行 它都会产生段错误。据我所知,它应该可以工作,但我是 C 语言的新手。我已经确定是通过使用 printf 语句缩小错误位置来产生错误的方程式,它总是得到那个特定的整个公式和 return 语句然后就死了。
如有任何建议或帮助,我们将不胜感激。
complex *values[]
很奇怪而且不自然。我看不到调用,但我设法说服自己这确实应该是 complex values[]
.
A complex
太简单了,不想在堆上单独分配每一个;几乎总是 complex
的数组会在对 malloc()
的单个调用中分配(或者甚至可能是调用者分配的堆栈数组)。
从名字开始,我可以很有信心地预测调用代码没有分配 values
中的每个人 complex
,而是分配 values
,因此崩溃是 values[i]->real
处的 ->
取消引用,并且 values[i]
未初始化。就如你所愿(将单数组发扬光大)values[i].real = ... ; values[i].imag = 0;
我目前正在制作一个近似薛定谔方程的程序,对于我的初始条件,我的教授说要从高斯开始。我为此使用的公式是这样的(抱歉,我不知道如何在降价中做方程式):
p(x) = ( 1/sqrt(2 * PI) ) * e^( -1/2 * (x-u)^2 / o )
为了简单起见,我从 u=0 和 o=1 开始,所以我在我的程序中使用它的方式是这样的:
double gaussian(double x) {
return (1/sqrt(2*M_PI)) * exp((-.5) * pow(x, 2));
}
void initial_conditions(int m, complex *values[], double dx) {
for (size_t i = 0; i < m; i++)
{
values[i]->real = gaussian(i * dx);
}
}
编译:gcc project1.c -lm -o project1
但是每次我 运行 它都会产生段错误。据我所知,它应该可以工作,但我是 C 语言的新手。我已经确定是通过使用 printf 语句缩小错误位置来产生错误的方程式,它总是得到那个特定的整个公式和 return 语句然后就死了。
如有任何建议或帮助,我们将不胜感激。
complex *values[]
很奇怪而且不自然。我看不到调用,但我设法说服自己这确实应该是 complex values[]
.
A complex
太简单了,不想在堆上单独分配每一个;几乎总是 complex
的数组会在对 malloc()
的单个调用中分配(或者甚至可能是调用者分配的堆栈数组)。
从名字开始,我可以很有信心地预测调用代码没有分配 values
中的每个人 complex
,而是分配 values
,因此崩溃是 values[i]->real
处的 ->
取消引用,并且 values[i]
未初始化。就如你所愿(将单数组发扬光大)values[i].real = ... ; values[i].imag = 0;