我无法在代码中找到错误源,在运行时会产生段错误。我知道错误在代码中基本上是:
#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_nest(8, 2, theta, phi);
的行。换句话说,我没有得到healpix代码的行,我正在导致错误。我不知道这是否是healpix在fortran中的神器,或者我是否没有正确编译它。但是,healpix的其他功能确实可以运行并具有正确的输出。这是一个单独的问题,但我也会对任何人的想法感兴趣。
答案 0 :(得分:0)
后两个值是" out"参数,所以你可以通过获取堆栈分配变量的地址来调用它。
#include "chealpix.h"
double theta, phi;
pix2ang_nest(8, 2, &theta, &phi);
此theta
和phi
应包含在函数中填充的值。
答案 1 :(得分:0)
该函数很可能期望这些指针指向已分配的内存。由于您尚未为这些指针分配内存,因此该函数在取消引用它们时将调用未定义的行为。
不是创建指针,而是创建基类型的变量并传入它们的地址。
double theta, phi;
pix2ang_nest(8, 2, &theta, &phi);