【发布时间】:2021-11-27 08:16:09
【问题描述】:
我是 C 语言的新手,我尝试编写函数来为二维数组分配内存 我在做什么:
void allocate(int **arr, int r, int c)
{
**arr = (int **)malloc(r*c*sizeof(int));
}
int main( void )
{
int NO_OF_COLS = 0;
int NO_OF_ROWS = 0;
scanf("%d%d", &NO_OF_ROWS, &NO_OF_COLS);
int **matrix;
allocate(matrix, NO_OF_ROWS, NO_OF_COLS);
return 0;
}
我有这个警告:从 'int **' 赋值给 'int' 使指针从没有强制转换的整数 [-Wint-conversion] 8 | **arr = (int **)malloc(rcsizeof(int)); | ^
我知道我在 allocate() 中将内存传递给“矩阵”,但我不明白如何返回新的内存地址并将其分配给矩阵
我尝试将allocate(matrix, NO_OF_ROWS, NO_OF_COLS); 更改为allocate(&matrix, NO_OF_ROWS, NO_OF_COLS);,但还是不行
【问题讨论】:
-
使用 2 颗星并不能简单地为您提供 2D 矩阵。如果你想要一个单一的分配,那么你需要一个一维数组并自己找出索引。如果是二维数组,那么您首先需要分配一个指针数组,然后每个指针分配一个一维数组。
-
您需要分配一维指针数组,其中的每个条目将是另一个一维整数数组
-
你可能想要
int (*matrix)[NO_OF_COLS] = malloc(NO_OF_ROWS * sizeof *matrix);
标签: c memory dynamic-memory-allocation allocation