C/C++构造连续二维数组的坑(MPI)

79 阅读1分钟
void alloc_matrix(void ***a, int m, int n, int size) {
    int i;
    void *storage;
    storage = (void *)malloc(m * n * size);
    *a = (void **)malloc(m * sizeof(void *));
    for (i = 0; i < m; i++) {
        //(*a)[i] = (float *)storage + i * n * size; // VS
        (*a)[i] = storage + i * n * size; // 服务器环境
    }
}
  • 在visual studio 的mpi环境下声明这个二维数组,storage 需要转换为 float 指针后才可以编译通过,在ubuntu服务器的mpi环境下,用了这个float指针转换反而可能会出错。

  • 我不止传了float指针,还传了int指针进来,想构造一个int二维数组,结果程序运行到第四个循环时突然报段错误,最后发现根本不是这里的错,把(float *)去掉就行了。 在这里插入图片描述

在这里插入图片描述