写一个函数到malloc双指针

Ace*_*Ace 5 c malloc pointers

我需要编写一个使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试用以下代替它:

double **G;
mallocDoubleArr(G, numNodes);
Run Code Online (Sandbox Code Playgroud)

功能是:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

Som*_*ude 8

你需要一个"间接",换句话说,通过G引用传递,如指向指向float的指针的指针:

void mallocDoubleArr(double ***arr, int size);
Run Code Online (Sandbox Code Playgroud)

然后将其称为

mallocDoubleArr(&G, numNodes);
Run Code Online (Sandbox Code Playgroud)

相应地修改mallocDoubleArr,例如

(*arr)[i] = malloc(size*sizeof(double));
Run Code Online (Sandbox Code Playgroud)