2017-04-23 1 views
1

그래서이 클래스의 폐쇄 해시 해시 테이블을 만드는거야의 벡터에 대한 포인터를 역 참조하고 그 포인트 구성원을 포함하는 구조C++ 세그먼트 오류 구조

struct Example { 
    string key; 
    string data; 

    Example() { key = "000"; } 
}; 

와 클래스를 가질 때 구조체의 벡터, 생성자, 문제를 설명하기 위해 사용할 함수에 대해 설명합니다.

class hash_table { 
    private: 
    vector<Example>* hash; 

    public: 
    hash_table(int size); 
    void dummy_method(); 
}; 

사용자/파일 입력을 기반으로 벡터의 구조 수를 동적으로 할당하기위한 것입니다.

hash_table :: hash_table (int size=10) 
{ 
    //initialize vector 
    vector<Example> * hash = new vector<Example>(size); 
    //test objects 
    for(int i=0;i<size;i++) 
    cout<<(*hash)[i].key<<endl; 
} 

위의 코드는 "000" 열 번을 출력으로, 10 명 멤버를 초기화 나타납니다. 그러나

, 한 번 나는 세그먼트 오류를 ​​얻을

void hash_table::dummy_method() { 
    cout<<(*hash)[0].key<<endl; 
} 

을 dummy_method- 호출하여이 시도

난이도이 작업을 수행하는 올바른 방법이 아니다 확신 해요,하지만 난 ' 영원히 찾고/땜질하고 있었고 해결책을 찾지 못하는 것 같습니다. 그러나 절대적으로 구조체 벡터에 대한 포인터를 사용해야하며, 어떻게 든 구조체를 동적으로 할당해야한다고 확신합니다 (어떻게 든). 어떤 도움을 주셔서 감사합니다.

은 (또한, 그래, 우리가 실제로 네임 스페이스를 사용해야합니다, 따라서 어떤 표준 어디서나)

+3

벡터에 대한 포인터가 아닌 벡터를 저장해야합니다. 그러면 버그 범위가 줄어들 것입니다. – juanchopanza

+0

'htable '이란 무엇이며 어떻게 정의됩니까? 요청한 문제를 재현하는 전체 예제 코드를 게시하십시오. 그렇지 않으면 유용한 답변을 제공하기가 어렵습니다. – emlai

+0

죄송합니다, htable은 더 큰 프로그램에서 왔습니다. 문제를 분리하기 위해 큰 프로그램의 기능을 작은 프로그램의 기능으로 복사했습니다. 올바른 코드를 반영하도록 편집했습니다. 현재이 프로그램은 완성 된 프로그램이므로 모든 문제를 격리해야합니다. –

답변

2

vector<Example> * hash = new vector<Example>(size); 식 이름 hash와 로컬 변수를 초기화합니다 (초기화되지 않은 남아)가 아닌 hash_table::hash 회원.

+0

해명 해 주셔서 감사합니다. hash_table :: hash 멤버를 동적으로 초기화하고 동적으로 할당 된 구조체로 채우는 쉬운 방법이 있는지 알고 있습니까? 미안 해요, 그게 바보 같은 질문이라면, 제 뇌는이 모든 것을 이해하려고 노력하는 것으로부터 녹아 내렸을 것입니다. –

+0

'벡터 *'부분을 제거하거나 클래스 멤버를 다루고 있음을 명시 적으로 표시하기 위해 'this-> hash'로 다시 작성하면됩니다. 이와 같은 이름 충돌은 C++에서 매우 번거롭기 때문에 멤버 변수가'm_'으로 시작하고 일반 변수가 항상 lower_case로 작성되고 함수는 항상 CamelCase로 작성되고 유형 이름은 't_', 네임 스페이스는'n_'로 시작합니다. – VTT

+0

나는 누군가가 대답하는 순간 나는 믿을 수 없을만큼 어리 석을 느낄 줄 알았다. 나는 틀리지 않았다. 도움에 정말 감사드립니다. –