如何正确初始化一些指针以用于 healpix 子例程?

How do I properly initialize some pointers for use in healpix subroutines?

我无法找到代码中的错误源,当 运行 产生段错误时。我知道错误出在代码中,本质上是:

#include "chealpix.h"
double *theta, *phi;
pix2ang_nest(8, 2, theta, phi);

valgrind 的输出是:

Use of uninitialised value of size 8
Call stack:
pix2ang_z_phi
pix2ang_nest
main

我相当有信心这个错误的来源是(如 valgrind 所说)未初始化的指针 thetaphi。我的问题是:如何正确初始化这些?我的理解是我要将这些指针传递给函数 pix2ang_nest(),而这个函数的工作是将 return 值放入内存中 thetaphi ] 指向。要使用这些变量,我会用 * 取消引用它们,例如cos(*theta);。在这种情况下,我希望初始化在 pix2ang_nest() 内进行。请有人介意为我澄清一下吗?

此外,

valgrind 消息中指定的唯一行是调用 pix2ang_nest(8, 2, theta, phi); 的行。换句话说,我没有得到导致错误的 healpix 代码行。我不知道这是 healpix 在 fortran 中的产物还是我没有正确编译它。然而,来自 healpix 的其他函数执行 运行 并具有正确的输出。这是一个单独的问题,但我也很想知道任何人对此的想法。

后两个值是"out"参数,所以可以通过栈分配变量的地址来调用

#include "chealpix.h"
double theta, phi;
pix2ang_nest(8, 2, &theta, &phi);

此后 thetaphi 应包含在函数中填充的值。

该函数很可能期望这些指针指向分配的内存。由于您没有为这些指针分配内存,该函数在取消引用它们时将调用未定义的行为。

与其创建指针,不如创建基类型的变量并传入它们的地址。

double theta, phi;
pix2ang_nest(8, 2, &theta, &phi);