Ich versuche, ein Dateisystem zu erstellen, und ich muss die Dateideskriptoren aufrufen.Callocing-Speicher
Sagen wir, ich habe zwei Strukturen mit den folgenden Definitionen:
#define DESCRIPTOR_MAX (256)
#define TABLE_MAX (32)
typedef struct S16FS S16FS_t;
typedef struct {
bitmap_t *fd_status;
size_t fd_pos[DESCRIPTOR_MAX];
inode_ptr_t fd_inode[DESCRIPTOR_MAX];
} fd_table_t;
struct FS {
back_store_t *bs;
fd_table_t fd_table;
};
Ich callocing ein neues Dateisystem ohne Probleme:
FS_t *fs = (FS_t *)calloc(8, sizeof(FS_t));
aber Mein Problem tritt auf, wenn ich die fd_table
innerhalb Callocaloc das FS
struct. Hier ist was ich versuche.
Dieser erzeugt keine Fehler:
fs->fd_table = *(fd_table_t*)calloc(TABLE_MAX, sizeof(fd_table_t));
Ich erhalte eine Fehlermeldung mit den folgenden:
fs->fd_table.fd_pos = (size_t *)calloc(TABLE_MAX, sizeof(size_t));
error: array type 'size_t [256]' is not assignable
mir jemand erklären kann, was ich falsch mache oder wenn Ich liege in meinem Prozess völlig falsch? Muss ich die fd_pos
sogar anrufen?
Sollten wir nur * raten * was 'FS_t' ist? Und Fyi, eine beliebige dereferenzierte Zuweisung auf der rechten Seite einer Zuweisung in einer einzigen Anweisung zu setzen, ist ein Rezept für ein Speicherleck. Dies ist: 'fs-> fd_table = * (fd_table_t *) Calloc (TABLE_MAX, sizeof (fd_table_t));' macht überhaupt keinen Sinn und verliert währenddessen Speicher. – WhozCraig
oh du weißt, ich habe vergessen, ein Typedef hinzuzufügen. Ich werde meine Frage bearbeiten –
Das ist, was ich dachte. Es erzeugte keine Fehler, aber es fühlte sich schrecklich, schrecklich falsch an. –