【问题标题】:_CrtlsValidHeapPointer(PuserData), Debug Assertion Failed Visual C++ (MPI)_CrtlsValidHeapPointer(PuserData),调试断言失败 Visual C++ (MPI)
【发布时间】:2014-04-21 15:50:13
【问题描述】:

我正在使用 MPI_Reduce 和 MPI_Scatter 函数在“N”个处理器中分散整数数组并打印数组的部分和累加。我在 Visual Studio 2010 上使用 Microsoft MPI (MSMPI)。但每次执行时它都会在标题“调试断言失败”旁边给出一个异常“_CrtlsValidHeapPointer(PuserData)”代码如下

enter code here
#include <mpi.h>
#include<iostream>

using namespace std;

int main(int argc, char *argv[]) {
    int size;
    int rank;
    int partialsum=0;
    int root =0;
    int accum=0;

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);


    int *globaldata = NULL;
    int *localdata = new int(4);

    if (rank == root) {
      globaldata = new int(size*4);
        for (int i=0; i<(size*4); i++)
        globaldata[i] =  2*i+1;

        cout<<"Processor"<<rank<<" has global data: ";
        for (int i=0; i<(size*4); i++)
         cout<<globaldata[i]<<" ";
        cout<<"\n";
    }

    MPI_Scatter(globaldata, 4, MPI_INT, localdata, 4, MPI_INT, root, MPI_COMM_WORLD);

    cout<<"Processor "<<rank<<"has local data";
    for(int i=0; i<4;i++)
        cout<<" "<<localdata[i];
    cout<<endl;
    for(int k=0;k<4;k++)
      partialsum += localdata[k];

    cout<<"Processor "<<rank<<" Partial Sum = "<<partialsum<<"\n";

    MPI_Reduce(&partialsum,&accum,1,MPI_INT,MPI_SUM, root,MPI_COMM_WORLD);
    if (rank == 0) {
      cout<<"Processor "<<rank<<" Accumulated Sum = "<<accum;
    }

    MPI_Finalize();
    return 0;
}

【问题讨论】:

    标签: visual-studio-2010 visual-c++ mpi


    【解决方案1】:

    错误很简单,就在这里:

    globaldata = new int(size*4);
    

    使用new 运算符分配动态数组的语法是new type[size]

    globaldata = new int[size*4];
    

    在您的情况下,为单个 int 分配了一个空间并将其设置为 size*4,并且紧跟在根内存分配之后的初始化代码覆盖了分配内存的末尾,从而破坏了堆结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多