如何使用 MPI

问题描述

我在 C 中使用 MPI 并且我有一个 double 数组,如下所示:

double *x = NULL;

我将此数组作为指向函数的双指针传递,并尝试以这种方式执行 malloc:

*x = (double*) malloc(n * sizeof(double));

其中 n一个整数。编译没问题,但执行返回此错误

malloc(): memory corruption
main: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' Failed.

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   PID 3842 RUNNING AT DESKTOP
=   EXIT CODE: 134
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGnorE THE BELOW CLEANUP MESSAGES
===================================================================================
YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Aborted (signal 6)
This typically refers to a problem with your application.
Please see the FAQ page for debugging suggestions
Makefile:22: recipe for target 'run' Failed
make: *** [run] Error 134

可能是什么问题?我该如何解决

解决方法

*x = (double*) malloc(n * sizeof(double));

*x 取消引用 x,因此它获得 x 指向的值 (a double)。 *x 为 NULL,在 C 中取消引用 NULL 指针是未定义的行为。

(double*) malloc 返回一个 double 类型的指针(a double*

所以你说 double * == double,因此崩溃。

将您的代码修改为 x = (double*) malloc(n * sizeof(double));,因此现在 x 指向分配的内存区域,其大小为 n * sizeof(double)

实际上,我很惊讶您的编译器没有就此警告您。

,

尝试使用以下格式的 malloc 可能会有所帮助,if((*x = (double*)malloc(sizeof(double)))==NULL) {printf("\n memory allocation error")};,通过此您将了解内存分配或您的程序是否有问题,并尝试使用以上格式。