Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MPICH&x27;s MPI_Comm_dup()在复制构造函数中失败_C++_Mpi_Mpich - Fatal编程技术网

C++ MPICH&x27;s MPI_Comm_dup()在复制构造函数中失败

C++ MPICH&x27;s MPI_Comm_dup()在复制构造函数中失败,c++,mpi,mpich,C++,Mpi,Mpich,我有一个对象需要为它设计一个复制构造函数。 该对象具有一个MPI_Comm成员,该成员应复制到新对象。 我不想使用浅拷贝,因为正确的方法是复制通信器。 myClass::myCLass(const myClass& in_class) { // .... MPI_Comm_dup(inclass.comm, &myclass.comm); ... } 它可以使用MPICH进行良好编译,但在运行时崩溃,并出现以下错误 (“第101行src/mpi/topo/topoutil.c

我有一个对象需要为它设计一个复制构造函数。 该对象具有一个MPI_Comm成员,该成员应复制到新对象。 我不想使用浅拷贝,因为正确的方法是复制通信器。

myClass::myCLass(const myClass& in_class)
{
// 
....
MPI_Comm_dup(inclass.comm, &myclass.comm);
...
}
它可以使用MPICH进行良好编译,但在运行时崩溃,并出现以下错误 (“第101行src/mpi/topo/topoutil.c文件中的断言失败:n==0”)
其他实现(如intel)工作正常

信息如此之少,人们只能猜测。如果是
topoutil.c
中的
n
,听起来很像是在复制一个空的(空的?)通信器


在调用之前添加您自己的
assert(inclass.comm!=MPI\u comm\u NULL)

事实并非如此,因为我提到intel和openmpi都可以工作,这意味着它们可以产生正确的结果@Hasbestein它可以在没有此检查或未使用调试标志编译的其他实现中偶然工作。请张贴一个最低限度的工作代码。最后,如果您发布或链接到topoutil.c的版本,甚至是您正在使用的mpich版本,它会有所帮助;这是一个更大的商业代码的一部分,因此我不能发布它。mpich/3.2.1是我正在使用的版本。我复制了一个非空的通信器,事实上,通信器是一个分布式图形通信器。其他实现使用调试和发布标志。@Hasbestein是什么让您认为在构造函数内部会产生错误的。你能在构造函数之外重现这个问题吗?