我想第一次使用mmap来存储一个树中有大量数据的对象。树类基本上包含一个指向类Node的根的指针,每个Node实例都有一个指向它的子元素的指针数组。我认为mmap正在做它应该做的事情,因为我可以访问树的常量成员,但是当我尝试访问指向根的指针时,我得到了段错误。使用mmap时的段错误
下面是如何创建树与根节点:
int main(int argc, char *argv[])
{
Tree *map;
...
map = (Tree*)mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (map == MAP_FAILED) {
close(fd);
perror("Error mmapping the file");
exit(EXIT_FAILURE);
}
Node* root = new Node("data");
map->set_root(root);
...
}
下面是怎样访问树:
int main(int argc, char *argv[])
{
int i;
int fd;
Tree *map;
fd = open(FILEPATH, O_RDONLY);
if (fd == -1) {
perror("Error opening file for reading");
exit(EXIT_FAILURE);
}
map = (Tree*)mmap(0, FILESIZE, PROT_READ, MAP_SHARED, fd, 0);
if (map == MAP_FAILED) {
close(fd);
perror("Error mmapping the file");
exit(EXIT_FAILURE);
}
Node* root = map->root();
cout << root->data();
...
根 - >数据的输出()提供了一个段错误。任何人都可以给我一个暗示我错在哪里?请说,如果我没有明确表示我的问题。
在此先感谢。
Mads
你的代码很混乱。你必须使用'main()'的版本,但它们是不同的 - 为什么在第一个版本中有一个'new',但不是在第二个版本中?无论如何,由于您只是在普通的免费商店中分配节点,而不是在映射的内存中分配节点,因此代码不太可能执行您的想法。 –