Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++;而不是C malloc/calloc? 我试图用MPI编写C++中的并行代码,但是我只知道如何使用C命令分配内存,作为MalC/CaloC。其目的是使用身份矩阵,并将其分解到MPI进程中_C++_C_Mpi - Fatal编程技术网

如何在C++;而不是C malloc/calloc? 我试图用MPI编写C++中的并行代码,但是我只知道如何使用C命令分配内存,作为MalC/CaloC。其目的是使用身份矩阵,并将其分解到MPI进程中

如何在C++;而不是C malloc/calloc? 我试图用MPI编写C++中的并行代码,但是我只知道如何使用C命令分配内存,作为MalC/CaloC。其目的是使用身份矩阵,并将其分解到MPI进程中,c++,c,mpi,C++,C,Mpi,标识矩阵在本地工作区上创建,然后从本地发送到要打印的秩0 我尝试过的代码有: 使用C语言分配内存: int** matrix = new int *[row]; 卡洛克 马洛克 用C++语言分配内存: int** matrix = new int *[row]; 我成功地用C语言编程,我多么希望重写C++代码。< /p> < p>,用连续数组工作在 MPI < />中是很方便的。我的建议是使用vector并展平数据: const int N = 100; const int

标识矩阵在本地工作区上创建,然后从本地发送到要打印的秩0

我尝试过的代码有:

使用C语言分配内存:

 int**  matrix = new int *[row];
  • 卡洛克
  • 马洛克

用C++语言分配内存:

 int**  matrix = new int *[row];

<>我成功地用C语言编程,我多么希望重写C++代码。< /p> < p>,用连续数组工作在<代码> MPI < />中是很方便的。我的建议是使用
vector
并展平数据:

const int N = 100;
const int M = 20;
const int size = 4;
int n = N / size;
std::vector<int> mat(n*M); // each process has a mat with length of n * M
for(uint32_t i = 0; i < n; ++i)
    for(uint32_t j = 0; j < M; ++j)
        mat.at(i * M + j) = j; // this is equivalent to mat[i][j] if mat was 2D
const int N=100;
常数int M=20;
常数int size=4;
int n=n/尺寸;
标准::向量矩阵(n*M);//每个过程都有一个长度为n*M的垫子
对于(uint32_t i=0;i
您还可以使用s:

使用ManagedInt=std::unique\u ptr;
auto-managedMat=std::unique_ptr(新ManagedInt[n]);
对于(尺寸i=0;i
坏方法是:

警告您即将进入***编程区

// allocate mat
int **mat = new int *[n];
for (int i = 0; i < n; i++) {
    mat[i] = new int [M];
}

// now you can use mat[i][j]

// delete mat
for (int i = 0; i < n; i++) {
    delete[] mat[i];
}
delete[] mat;
//分配mat
int**mat=新int*[n];
对于(int i=0;i

在C++中尽量不要使用手动内存管理。使用容器和/或智能指针。只需使用
std::vector
,它将负责管理内存,其行为类似于动态大小的C数组。N是什么?编译时知道吗?@YanB。这怎么是重复?这是完全不同的问题,这是完全不同的问题。我试图找出在一个特定的MPI问题之间的C和C++之间的动态分配内存的比较。
using ManagedInt = std::unique_ptr<int[]> ;
auto managedMat = std::unique_ptr<ManagedInt[]>(new ManagedInt[n]);
for (size_t i = 0; i < n; ++i)
    managedMat[i] = ManagedInt(new int[M]);

for(uint32_t i = 0; i < n; ++i)
    for(uint32_t j = 0; j < M; ++j)
       managedMat[i][j] = j;
// allocate mat
int **mat = new int *[n];
for (int i = 0; i < n; i++) {
    mat[i] = new int [M];
}

// now you can use mat[i][j]

// delete mat
for (int i = 0; i < n; i++) {
    delete[] mat[i];
}
delete[] mat;