如何正确初始化一些指针以用于 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 所说)未初始化的指针 theta
和 phi
。我的问题是:如何正确初始化这些?我的理解是我要将这些指针传递给函数 pix2ang_nest()
,而这个函数的工作是将 return 值放入内存中 theta
和 phi
] 指向。要使用这些变量,我会用 *
取消引用它们,例如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);
此后 theta
和 phi
应包含在函数中填充的值。
该函数很可能期望这些指针指向分配的内存。由于您没有为这些指针分配内存,该函数在取消引用它们时将调用未定义的行为。
与其创建指针,不如创建基类型的变量并传入它们的地址。
double theta, phi;
pix2ang_nest(8, 2, &theta, &phi);
我无法找到代码中的错误源,当 运行 产生段错误时。我知道错误出在代码中,本质上是:
#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()
,而这个函数的工作是将 return 值放入内存中 theta
和 phi
] 指向。要使用这些变量,我会用 *
取消引用它们,例如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);
此后 theta
和 phi
应包含在函数中填充的值。
该函数很可能期望这些指针指向分配的内存。由于您没有为这些指针分配内存,该函数在取消引用它们时将调用未定义的行为。
与其创建指针,不如创建基类型的变量并传入它们的地址。
double theta, phi;
pix2ang_nest(8, 2, &theta, &phi);