c - 写一个函数到 malloc 双指针

标签 c pointers malloc

我需要编写一个使用 malloc 创建双指针的函数。

这就是我通常声明双指针的方式:

double **G; //Create double pointer to hold 2d matrix

*G = malloc(numNodes * sizeof(double*));
for(i = 0; i < numNodes; i++)
{
    G[i] = malloc(numNodes*sizeof(double));
    for (j = 0; j < numNodes; j++)
    {
        G[i][j] = 0;
    }
}

现在我尝试将其替换为:

double **G;
mallocDoubleArr(G, numNodes);

函数是:

void mallocDoubleArr(double **arr, int size)
{
    int i, j;

    *arr = malloc(size * sizeof(double*));

    for(i = 0; i < size; i++)
    {
        arr[i]= malloc(size*sizeof(double));
        for (j = 0; j < size; j++)
        {
            arr[i][j] = 0;
        }
    }
}

为什么这行不通?

最佳答案

您还需要一个“间接”,换句话说,通过引用传递 G,就像指向指向 float 指针的指针一样:

void mallocDoubleArr(double ***arr, int size);

然后称它为

mallocDoubleArr(&G, numNodes);

相应地修改mallocDoubleArr,例如

(*arr)[i] = malloc(size*sizeof(double));

关于c - 写一个函数到 malloc 双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19525265/

相关文章:

c - 如何调试由于超出可用动态堆而导致的 Emscripten 段错误

c++ - malloc 分配的内存可以使用多少时间?

c++ - 为什么c++中的引用传递用functionName(dataType& variableName)来表示?

c - 避免需要初始化数组的技巧

c - 我们如何分配内存以返回一个 char**

c - Linux 内核链表

c - 为什么错误的结构会导致段错误

C 指向另一个结构体的指针

c - 当在 powerPC sizeof 上增加指向结构数组的指针时,无法按预期工作

为许多小的、固定大小的 block 自定义 malloc?