我在尝试弄清楚如何为这个结构分配和释放内存时遇到了一些麻烦。分配这个嵌套结构的正确方法是什么?
我需要使用它来创建FiniteTable在牛顿插值中使用。
typedef struct{
unsigned int empty;
float value;
}FiniteTableValue;
第一种是一种具有真正价值的节点。
typedef struct{
FiniteTableValue *column;
unsigned int length;
}FiniteTableRow;
FiniteTableRow保持FiniteTableValues的阵列。
typedef struct{
FiniteTableRow *row;
unsigned int length;
}FiniteTable;
FiniteTable然后保持FiniteTableRows的阵列。
typedef struct{
FiniteTable *tables;
unsigned int length;
}FiniteTableList;
FiniteTableList是FiniteTable的
我试着用的valgrind到debugg它的名单,似乎我一直访问我没有分配一些地址。
此外,这是正确的方式来释放所有?
FiniteTableList *ftl ...
...
for(int i = 0; i < ftl->length; i++){
FiniteTable table = ftl->tables[i];
for(int j = 0; j < table.length; j++){
FiniteTableRow row = table.row[j];
free(row.column);
}
free(table.row);
}
free(ftl->tables);
free(ftl);
valgrind错误是什么?如果涉及未定义的数据,请尝试使用'--track-origins = yes'运行。 –
它对于“有条件的跳转或移动取决于未初始化的值”我知道它们在哪里,但我需要知道的只是如何简单地通过malloc启动所有这些结构 – Felipe
在这种情况下,'--track-origins = yes'应该指向您需要修复的源代码位置。如果没有,您需要发布valgrind错误和相应的源代码。 –