内存分配。二维数组(Void函数)

时间:2015-10-26 20:04:21

标签: c pointers matrix 2d void

我在这个论坛上关注了几个例子,但似乎我的程序在某些时候仍然会崩溃。

我想要的只是使用void function进行内存分配。

void alloc(int ***matrix, int n)
{
    int i = 0;
    for( ; i < n; i++)
    {
        (*matrix)[i] = (int*)malloc(n * sizeof(int));
    }

    i = 0;
    for( ; i < n; i++)
    {
        int j = 0;
        for( ; j < n; j++)
        {
            (*matrix)[i][j] = i * j;
        }
    }
}

//-------------------------------------------------------------------
int main()
{
    int n;
    int **matrix_pp;

    printf("Enter n: ");
    scanf("%d", &n);

    alloc(&matrix_pp, n);

    free(matrix_pp);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您尝试在分配之前使用(*matrix)[i]。添加:

 (*matrix) = malloc(n * sizeof(**matrix));
for循环之前

请注意以下两点:

1)不要投射malloc

的结果

2)使用sizeof(*pointer)而不是明确写出类型;这样,如果您决定稍后更改类型,它仍然可以正常工作。

此外,您还需要free循环中的所有分配作为循环;否则,你有内存泄漏。