我无法访问使用 mmap 初始化的全局结构指针。试图在 throw segfaults 中声明的函数之外的函数中访问结构的成员。
结构:
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 文档和可变长度方法,但没有运气。提前致谢!