调用内存
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
.
归零
我正在尝试创建一个文件系统,我需要调用文件描述符。
假设我有两个具有以下定义的结构:
#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
.