二维数组分配函数,C中有一个malloc

时间:2013-05-29 20:04:37

标签: arrays function return malloc 2d

我需要为分配2D数组定义函数,但它应该只调用一次malloc。

我知道如何分配它(-std = c99):

int (*p)[cols] = malloc (sizeof(*p) * rows);

但我无法弄清楚如何从功能中返回它。返回不是选项,因为一旦函数结束(或至少部分函数),数组将停止存在。因此,只有将数组传递给此函数的选项才是参数,但上述解决方案需要在声明中定义数量的cols。它甚至可能吗?

感谢。

感谢用户kotlomoy我设法解决了这个问题:

...
#define COLS 10
#define ROWS 5

int (*Alloc2D())[COLS]
{
    int (*p)[COLS] = malloc(sizeof(*p) * ROWS);
    return p;
}

//and this is example how to use it, its not elegant,
//but i was just learning what is possible with C

int main(int argc, char **argv)
{
    int (*p)[COLS] = Alloc2D();
    for (int i = 0; i < ROWS; i++)
        for(int j = 0; j < COLS; j++)
            p[i][j] = j;

    for (int i = 0; i < ROWS; i++){
        for(int j = 0; j < COLS; j++)
            printf("%d", p[i][j]);
        printf("\n");
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

int * Alloc2D(int rows, int cols)
{
    return malloc(sizeof(int) * rows * cols);
} 

使用。

分配:

int * array = Alloc2D( rows, cols );

获取元素[i,j]:

array[ cols * i + j ]

不要忘记清理记忆:

free( array );