为什么我不能分别分配2D数组的每个索引。 如果要在C中使用动态分配的数组,是否有任何正确且适当的分配内存的方法? 我收到此代码的细分错误 这是我的代码:
typedef struct
{
char ***sheet;
int columns;
int rows;
} SPREADSHEET; // to access data sheet[COL][ROW]
SPREADSHEET *createSpreadSheet(int columns, int rows) {
if (columns <= 0 || rows <= 0){ // Disallow 0 or negative rows/columns
return NULL;
}
SPREADSHEET *sp = malloc(sizeof(SPREADSHEET));
sp->columns = columns;
sp->rows = rows;
for(int i=0; i<rows; i++){
for(int j=0; j<columns; j++){
printf("i: %i, j: %i\n", i, j);
sp->sheet[i][j] = malloc(sizeof(char(*))+2);
}
}
return sp;
}
答案 0 :(得分:1)
我认为您正在寻找的是这个
ISupportInitialize
typedef struct
{
int columns;
int rows;
char sheet[];
} SPREADSHEET;
SPREADSHEET *sp = malloc( sizeof(SPREADSHEET) + sizeof(char[columns][rows]) );
sp->columns = columns;
sp->rows = rows;
for(size_t i=0; i<columns; i++)
{
for(size_t j=0; j<rows; j++)
{
sp->sheet[i*rows + j] = something;
}
}
...
free(sp);
是所谓的 flexible array成员。它必须在结构的最后声明,并且保证在结构本身之后分配尾随内存时具有确定性。变量本身不会增加结构的大小。
不幸的是,C仅允许单行灵活数组成员,因此,如果您希望按情况使用它,则必须使用“混合2D数组”。这意味着我们将在运行时手动计算数组索引,以便访问数组项。
或者,您也可以通过定义明确的临时数组指针访问项目:
sheet