私は、この構造のメモリをどのように割り当てて解放するかを考え出すのに問題があります。この入れ子構造を割り当てる正しい方法は何ですか?
これを使用して、ニュートン補間で使用する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は、私はvalgrindのとそれをdebuggしようとしたFiniteTableの
のリストであり、私はいつも、私は割り当てられませんでしたいくつかのアドレスにアクセスするようです。
また、これはすべての割り当てを解除する正しい方法ですか?あなたの解放例で
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エラーとそれに対応するソースコードを投稿する必要があります。 –