2017-10-16 1 views
-1

내 사용자 정의 구조 내에 std::unordered_map<char, Node*>이 있습니다. 빈으로으로 초기화하고 싶습니다. 내가 뭐 잘못 했어요? 두 종류의 초기화를 시도했습니다. 둘 다 동일한 결과를 제공합니다.C++에서 내 구조 내에서 비어있는 unordered_map을 초기화하십시오.

다음 문 :

newStructure->map = unordered_map<char, Node*>(); 

때로는 성공 결과,이 맵의 크기는 그것이 있어야 0이다. 대부분의 경우,이 초기화 중에 실패하고 다음 오류가 map없이 초기화 생성 될 것이다 :

의 malloc : 포인터가

할당되지 않은 해제되고이 저를 줄 것이다 극단적 인 거대한 크기의 초기 std::unordered_map. 지도의 크기는 88029716824088 일 수 있습니다.

std::unordered_map 구조체를 올바르게 초기화하려면 어떻게해야합니까? 내 initializer는 다음과 같이 정의된다,

struct Node { 
    char letter; 
    unordered_map<char, Node*> next; 
    bool hasEnd; 
    static Node* init(char); 
} 

을 그리고 :

내 구조는 다음과 같이 정의된다

Node* Node::init(char letter) { 
    Node *newNode = (Node*) malloc(sizeof(Node)); 
    newNode->letter = letter; 
    newNode->hasEnd = false; 
    return newNode; 
}; 

때로는 next의 크기가 매우 큰 숫자가 될 것입니다.

+0

지도를 정의하면 이미 비어 있습니다. – user1438832

+0

@ user1438832지도의 크기가 매우 커질 수 있습니다. 어떻게 그럴 수 있니? – Judgelight

+4

당신은'malloc'을 사용하여 C++ 객체를 할당하지 않았습니까? [어떤 경우 malloc vs new를 사용해야합니까?] (https://stackoverflow.com/questions/184537/in-what-cases-do-i-use-malloc-vs-new) –

답변

0

사실 맵을 만들면 기본적으로 이미 비어 있습니다.
반면에 C++ 객체를 만들 때는 malloc이 아니라 new을 사용해야합니다. 기본 차이점은 new은 개체의 생성자를 호출하지만 malloc은 그렇지 않다는 것입니다.
자세한 내용은 여기를 참조하십시오. In what cases do I use malloc vs new?

관련 문제