fread'ing i fwrite'ing struktury zawierającej wskaźniki [duplikat]

To pytanie ma już tutaj odpowiedź:

Pisanie i czytanie (fwrite - fread) struktur ze wskaźnikami 3 odpowiedzi
gcc (GCC) 4.7.0
c89

Dzień dobry,

Mam następującą strukturę, którą próbuję napisać i przeczytać.

Jednak ponieważ moje urządzenie i zasób są wskaźnikami. Fwrite odczyta wartości wskaźnika, a nie dane. Nie mogę użyć tablicy dla urządzenia lub zasobu. Tylko wskaźniki, które muszą być dynamicznie przydzielane.

Przydzielam całą pamięć dla elementów struktury przed napisaniem. Nie pokazano tutaj, ponieważ chcę zachować krótki fragment. Nie jest też wolne.

W mojej funkcji fread przydzielam pamięć dla urządzenia i zasobu, aby fread odczytał te lokalizacje pamięci. Jednak to nie zadziała.

Jak najlepiej to zrobić?

Wielkie dzięki za każdą radę,

struct data {
    int id;
    int set;
    char *device;
    char *resource;
};

struct database {
    struct data **db_data;
    size_t database_rows;
    size_t database_data_size;
};

int database_write(FILE *fp, const struct database *db)
{
    rewind(fp);

    if(fwrite(*db->db_data, sizeof(struct data), 1, fp) == -1) {
        return DATABASE_ERROR;
    }

    return 0;
}

struct database* database_read(FILE *fp, size_t db_rows, size_t db_data_size)
{
    struct database *db = NULL;
    size_t i = 0;

    db = malloc(sizeof(struct database));

    db->database_rows = db_rows;
    db->database_data_size = db_data_size;
    db->db_data = malloc(sizeof(struct data) * db_rows);

    for(i = 0; i < db_rows; i++) {
        db->db_data[i] = malloc(sizeof(struct data));
        db->db_data[i]->device = malloc(db_data_size);
        db->db_data[i]->resource = malloc(db_data_size);
    }

    rewind(fp);

    if(fread(*db->db_data, sizeof(struct data), 1, fp) == -1) {
        return NULL;
    }

    return db;
}

questionAnswers(3)

yourAnswerToTheQuestion