gpt4 book ai didi

c - 在 mmap 中使用灵活的数组成员

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:50 26 4
gpt4 key购买 nike

我无法访问我正在使用 mmap 初始化的全局结构指针。试图在抛出段错误中声明的函数之外的函数中访问该结构的成员。

结构:

typedef struct foo {
uint32_t size;
bar_t array[0];
} foo_t;

初始化:

foo_t* foo; // global

static void* init_function(...) {
fd = open(filename, O_CREAT | O_WRONLY, 0644);
write(...);
lseek(...);
write(...);
foo = mmap(0, BIG_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
foo->size = 0;
}

导致段错误的原因:

static int another_function(...) {
if (foo->size == 0) {...} //foo->size causes it
}

BIG_SIZE 是一个定义值,应该足够大以满足我的需要。

无论如何,我为 (...)s 道歉,但这就是问题所在。我研究了 mmap 文档和可变长度方法,但没有运气。提前致谢!

最佳答案

您没有向我们展示所有内容,但似乎您只是分配了全局变量,但没有初始化映射区域的内容。你至少应该给它一个foo->size = 0 某处,如果文件是新创建的,或者您应该使用 ftruncate 而不是 fseek write 序列来保证 block (包括 size)被 0 填充。

关于c - 在 mmap 中使用灵活的数组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29937300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com