首页 > 解决方案 > 以结构形式编写的矩阵的动态内存分配

问题描述

我需要为包含矩阵的结构分配内存:

typedef struct matrix{
int row;
int column;
int **data;
}MATRIX;

我需要在一个单独的函数中完成所有这些工作。我有点困惑,因为我不确定我应该如何为结构内部的矩阵 [row*column] 分配内存,该结构还包含有关行和列大小的数字信息。根据我的(明显有缺陷的)逻辑,这意味着我需要为 struct 分配内存,输入有关行和列大小的信息,然后为结构内部的矩阵额外分配内存。我对此有点困惑,但这是我迄今为止想出的:

int** alloc(MATRIX *array , int row , int column){

int i;

array->data = (int**)malloc(row * sizeof(int*));

for(i=0; i<br_red; i++){
    array->data[i] = (int*)malloc(column * sizeof(int));
}
return array->data;
}

然后在main()我里面:

MATRIX *array = (MATRIX*)malloc(sizeof(MATRIX));
scanf("%d" , &array->row);
scanf("%d" , &array->column);
array->data = alloc(array , array->row , array->column);

这段代码可以正常工作,但我的任务是为一个类型函数(返回完全分配的结构+矩阵)内的所有数据完全分配内存,MATRIX*而无需跳回进行main()扫描。

标签: cpointersmatrixstructdynamic-memory-allocation

解决方案


您可以更改alloc函数以在内部分配 aMATRIX并将其作为函数结果返回,如下所示:

MATRIX* alloc (int row , int column)
{
    MATRIX *array = (MATRIX *) malloc (sizeof (MATRIX));
    array->data = (int**)malloc(row * sizeof(int*));
    for (int i = 0; i < row; i++)
        array->data[i] = (int*)malloc(column * sizeof(int));
    return array;
}

你的main然后变成:

int row, column;
scanf("%d" , &row);
scanf("%d" , &column);
MATRIX *array = alloc (row, column);

之前的强制转换malloc不是必需的(在 C 中),但它们是无害的。


推荐阅读