많은 양의 트리 객체를 저장하기 위해 mmap을 처음 사용하려고합니다. tree 클래스는 기본적으로 Node 클래스의 루트에 대한 포인터를 포함하고 있으며 각 Node 인스턴스에는 자식 노드에 대한 포인터 배열이 있습니다. 나는 나무의 상수 멤버에 액세스 할 수 있기 때문에 mmap이하는 일을하고 있다고 생각하지만 루트에 대한 포인터에 액세스하려고하면 segfault가 생깁니다.mmap을 사용할 때 segfault
이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();
...
이 루트 레벨> 데이터의 출력은() segfault의를 제공
여기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);
...
}
내가 액세스하는 방법 트리입니다 : 여기
는 루트 노드와 트리를 생성하는 방법이다 . 아무도 내가 틀린 곳으로 나에게 힌트를 줄 수 있습니까? 제 문제를 분명히하지 않는다고 말하십시오.
미리 감사드립니다.
Mads
코드가 혼란 스럽습니다. 당신은'main()'의 버전을 가져야 만합니다. 그러나 그것들은 다릅니다. 왜 첫 번째 버전에는'new'가 있지만 두 번째 버전에는'new'가 있습니까? 어쨌든, 당신이 코드를 생각할 수있는 일은 거의 없을 것입니다. 단지 노드를 할당 된 메모리가 아니라 일반 자유 저장소에 할당하기 만하면됩니다. –