问题描述
我在 C 中使用 MPI 并且我有一个 double 数组,如下所示:
double *x = NULL;
我将此数组作为指向函数的双指针传递,并尝试以这种方式执行 malloc:
*x = (double*) malloc(n * sizeof(double));
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")};
,通过此您将了解内存分配或您的程序是否有问题,并尝试使用以上格式。