你知道为什么下面的代码会给我一个段错误吗?
buf_int = new int[12];
buf_int[0] = stx1.min;
buf_int[1] = stx1.max;
buf_int[2] = stx2.min;
buf_int[3] = stx2.max;
buf_int[4] = sty1.min;
buf_int[6] = sty2.max;
MPI_Bcast(&buf_int, 12, MPI_INT, 0, MPI_COMM_WORLD);
stx1.min = buf_int[0];如果我注释掉最后一行,我不会得到段错误,但是如果我把它留在里面,我会得到
=====================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= EXIT CODE: 11
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
=====================================================================================错误被证明是分段错误。如果不能从给出的代码中推断出错误,我可以包含更多。
buf_int被声明为
int* buf_int;发布于 2011-11-16 01:59:33
由于MPI_Bcast的签名是这样的:
int MPI_Bcast(
void *buffer,
int count,
MPI_Datatype datatype,
int root,
MPI_Comm comm
);从它的documentation中提取,您应该这样调用该函数:
MPI_Bcast(buf_int, 12, MPI_INT, 0, MPI_COMM_WORLD);也就是说,传递buf_int作为第一个参数,而不是传递&bug_int。
您可以通过向下滚动page查看示例代码,并比较它们的用法。
https://stackoverflow.com/questions/8140607
复制相似问题