调用内存

Callocing memory

我正在尝试创建一个文件系统,我需要调用文件描述符。

假设我有两个具有以下定义的结构:

#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;
};

我正在毫无问题地调用新文件系统:

FS_t *fs = (FS_t *)calloc(8, sizeof(FS_t));

但是当我想在 FS 结构中调用 fd_table 时,我的问题出现了。这就是我正在尝试的。

这个没有错误:

fs->fd_table = *(fd_table_t*)calloc(TABLE_MAX, sizeof(fd_table_t));

我收到以下错误:

fs->fd_table.fd_pos = (size_t *)calloc(TABLE_MAX, sizeof(size_t));

error: array type 'size_t [256]' is not assignable

有人可以向我解释我做错了什么,或者我的过程是否完全错误?我什至需要 calloc fd_pos?

看起来fs->fd_table.fd_pos是一个数组,而不是指针。如果你想要一个动态数组,那么将类型更改为 size_t*.

否则,将其保留为数组而不使用动态分配就完全可以了。在这种情况下,如果你想将内存归零(如 calloc 所做的那样),你可以只使用 memset:

memset( fs->fd_table.fd_pos, 0, sizeof(fs->fd_table.fd_pos) );

哦,是的,WhozCraig 还指出您的第一个示例是泄漏(分配内存,然后取消引用和复制,然后丢失指针)。事实上,您不需要像我上面建议的那样 memset,因为整个结构已用第一个 calloc.

归零