首页 > 解决方案 > 如何使用 MPI 解决 C 中的“malloc():内存损坏”

问题描述

我在 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

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

标签: cmemorymallocmpicorruption

解决方案


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

*xdereferences 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)

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


推荐阅读