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

C 如何正确初始化某些指针以用于healpix子例程?,c,valgrind,C,Valgrind,我在查找代码中的错误源时遇到问题,运行时会产生segfault。我知道错误在代码中,本质上是: #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所说)未初始

我在查找代码中的错误源时遇到问题,运行时会产生segfault。我知道错误在代码中,本质上是:

#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所说)未初始化的指针
theta
phi
。我的问题是:如何正确初始化这些?我的理解是,我要将这些指针传递给函数
pix2ang_nest()
,该函数的任务是将返回值放入
theta
phi
指向的内存中。要使用这些变量,我将使用
*
取消对它们的引用,例如
cos(*theta)。在本例中,我希望初始化在
pix2ang_nest()
中进行。有人介意帮我澄清一下吗

另外,

valgrind消息中指定的唯一一行是
pix2ang_嵌套的行(8,2,θ,φ)被调用。换句话说,我没有得到导致错误的healpix代码行。我不知道这是不是用fortran编写的healpix的产物,或者我没有正确编译它。但是,healpix中的其他函数确实运行并具有正确的输出。这是一个单独的问题,但我也对任何人的想法感兴趣。

后两个值是“out”参数,因此可以通过获取堆栈分配变量的地址来调用它

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

在此之后,
theta
phi
应该包含在函数中填充的值。

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

创建基类型的变量并传入它们的地址,而不是创建指针

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

为什么要为两种不同的语言发送垃圾标签?删除不相关的标签。垃圾邮件有点刺耳。我包含了C++标签,因为我在一个更大的C++项目中使用了上面的代码。如果因为任何原因,C++代码变得相关,标签也会变得相关。因为它是简单的,所以我像你所说的那样删除它。如果你编译成C++,那它不是C!他们是不同的语言。相同的语法并不意味着相同的语义!。天哪,老虎,你说得对。谢谢你。我觉得自己很傻,因为我的全部理解是巴斯·阿克沃兹。