0

我正在为我的代码使用 KiFMM 和 PETSc。串行版本没有问题,但是当我尝试将 MPI 与 2 个节点一起使用时,我现在收到一个错误(*trgPos)(j,i),其类型DblNumMat如下所示: http ://www.mrl.nyu.edu/~harper /kifmm3d/documentation/common/html/nummat_8hpp_18ed51e81f911a23442591467d7a83ca.html

gdb 的回溯显示了这一点:

 Program received signal SIGSEGV, Segmentation fault.
0x000000000070761e in NumMat<double>::operator() (this=0x0, i=0, j=0)
at /directory/src/Onepart/../../inc/KIFMM3D/common/nummat.hpp:101
101      assert( i>=0 && i<_m && j>=0 && j<_n );
 (gdb) bt
 #0  0x000000000070761e in NumMat<double>::operator() (this=0x0, i=0, j=0)
at /directory/src/Onepart/../../inc/KIFMM3D/common/nummat.hpp:101

任何人都知道为什么会发生这种情况以及我能做些什么?

4

1 回答 1

0
NumMat<double>::operator() (this=0x0, i=0, j=0)
                            ^^^^^^^^

这表明您正在operator()通过 NULL 指针调用 ,并且应该已经提示您trgPos该 NULL 指针。您应该检查代码并跟踪每个等级所采用的代码路径。一定是在某些情况下trgPos没有正确初始化,或者可能是内存分配运算符由于内存不足而失败。

于 2015-05-22T14:25:06.103 回答