c - 声明多个结构并将它们覆盖在已分配的内存上

标签 c memory struct

我是 C/C++ 的新手,所以我知道这个问题可能很简单,但我不明白如何继续。我已经像这样分配了 512 字节的内存块(扇区是一个大小为 512 字节的结构): char* block = (char *) malloc (sizeof(Sector));

我有另一个 128 字节大小的结构:

typedef struct inode {
int fileSize;
int fileType;
int* blockPointer[30];
} inodeFile;

我想做的是将这个结构覆盖在 block 上。我需要每个 block 包含 4 个 inode 结构,但每个结构可能没有任何与之关联的值,直到稍后在程序中。例如:

((*inodeFile) block)->fileSize = 10;

如果我没理解错的话,这是将指针 block 的前 4 个字节设置为 fileSize。我将继续为结构的每个字段执行此操作。

我的问题是,如何为 4 个不同的 inode 执行此操作?由于有 4 个不同的 inode,我如何返回不同结构的每个字段的值?似乎简单地说 block->fileSize 是行不通的,因为最多可以有四种不同的文件大小。

最佳答案

您可以使用union 将 block 覆盖在扇区上。因为字段是 int 类型或指针或大小为 512,所以只要自然大小为 32 位,就不会有对齐问题。

typedef struct {
    int fileSize;
    int fileType;
    int* blockPointer[30];
} inode;

typedef union {
    unsigned char bytes[512];
    inode block[4];
} sector;

int main()
{
    sector thisec;
    thisec.bytes[511] = 0;
    thisec.block[0].fileSize = 10;
    return 0;
}

关于c - 声明多个结构并将它们覆盖在已分配的内存上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279083/

相关文章:

memory - lldb读取内存指针

c - C/C++ 编程中%0x%x 是什么意思?

c - 如何使用相同的代码复制在文件中创建的完全相同的结构?

c - union 和结构中的偏移量

c++ - 作为 DLL 的 GIT C/C++ 库

.net - 在对象列表中搜索所有属性

Mysql- "SELECT field "确实将内存填充为 "SELECT * "吗? - 因诺数据库

c++ - 将结构体转换为整数合法吗?

c - 从 C 中的字符串中解析单词

c - 重新分配() : invalid next size: 0x0000000002119010