【发布时间】:2018-11-07 06:44:16
【问题描述】:
为什么我不能单独分配二维数组的每个索引。 如果您想在 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;
}
【问题讨论】:
-
三颗星,两个 malloc,减一。通常,粗略的观察表明存在问题。每颗星表示一个级别的指向。对于每个级别,您都需要能够解释它指向的内存是如何分配的。请在您的问题中这样做以提高清晰度。
-
你永远不会让
sheet指向任何地方。 -
而
sizeof(char(*))是指向char的指针 的大小。这等于4或8(取决于32 位或64 位系统)。如果您想要三个字符的空间(包括空终止符),那么这只是3。
标签: c pointers memory-management