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;