我在嘗試弄清楚如何爲這個結構分配和釋放內存時遇到了一些麻煩。分配這個嵌套結構的正確方法是什麼?
我需要使用它來創建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錯誤和相應的源代碼。 –