对mallocated结构属性的第二次访问使程序崩溃



我尝试在此表结构上使用malloc,该表结构包含包含单元格的行。首先我分配了表,然后成功地添加并初始化了第一行,但当试图在第二行设置单元格计数时,它崩溃了——我不知道为什么,可能是上一个指针留下的一些?或者我需要为结构体的道具分配内存吗?这是我第一次深入研究malloc,如果它是一些琐碎的事情,我很抱歉。

typedef struct cell_t
{
char* content;
int contentLength;
} cell_t;
typedef struct row_t
{
cell_t* cells[100];
int cellCount;
} row_t;
typedef struct table_t
{
row_t* rows[100];
int rowCount;
} table_t;
row_t* allocateRow()
{
row_t* allocatedRow;
allocatedRow = malloc(sizeof(row_t*));
if (allocatedRow)
{
printf("THIS PRINTS TWICE");
allocatedRow->cellCount = 0;
printf("THIS PRINTS ONCE");
}
else
{
printf("FAILED TO ALLOCATE ROW!");
}
return allocatedRow;
}
void addRow(table_t* tableToAddTo, int nToAllocate)
{
while (tableToAddTo->rowCount < nToAllocate)
{
tableToAddTo->rows[tableToAddTo->rowCount] = allocateRow();
tableToAddTo->rowCount++;
}
}
int main()
{
table_t* inputTable = malloc(sizeof(table_t));
if (inputTable)
{
inputTable->rowCount = 0;
}
else
{
printf("FAILED TO ALLOCATE TABLE!");
return 1;
}
addRow(inputTable, 5);
for (int i = 0; i < inputTable->rowCount; i++)
{
free(inputTable->rows[i]);
}
free(inputTable);
return 0;
}

在allocateRow((中更改

allocatedRow = malloc(sizeof(row_t*));

进入

allocatedRow = malloc(sizeof(row_t));

您需要分配单元格或更改

cell_t* cells[100];

进入

cell_t cells[100];

相关内容

  • 没有找到相关文章

最新更新