C 如何正确初始化某些指针以用于healpix子例程?
我在查找代码中的错误源时遇到问题,运行时会产生segfault。我知道错误在代码中,本质上是: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所说)未初始
#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!他们是不同的语言。相同的语法并不意味着相同的语义!。天哪,老虎,你说得对。谢谢你。我觉得自己很傻,因为我的全部理解是巴斯·阿克沃兹。