0
메소드를 정의하는 헤더 파일이 있습니다. 나는 궁극적으로 쌍의 데이터를 저장하기 위해 이중 연결된 목록을 구현하려고합니다. 이이 cont.h구조체에 액세스 할 때 세그먼트 화 오류가 발생했습니다.
template <class Key, class T> class storage;
template < class Key, class T, class Compare = std::less<Key> >
class cont{
private:
storage <Key, T> data;
public:
typedef size_t size_type;
typedef Key key_type;
typedef T mapped_type;
//default constructor
cont(){}
cont(key_type k, mapped_type m)
{
std::pair<Key, T> x = std::make_pair(k,m);
data.begin_list(x);
//std::pair<Key, T> a = std::make_pair(k,m);
//data.push(a);
}
};
template <class Key, class T>
struct node
{
node *prev, *next;
std::pair<Key, T> node_data;
};
template <class Key, class T>
class storage{
private:
node <Key, T> *head;
node <Key, T> *tail;
node <Key, T> *curr;
int size;
public:
//default ctor
storage(){}
void begin_list(std::pair <Key, T> h)
{
size=1;
//bottom two lines induce segmentation fault
//head->node_data=h;
//head->prev=NULL;
}
};
main.cc는 다음과 같이 표시됩니다
#include "cont.h"
int main() {
cont<double, int> s(6.6, 3);
}
내가 세그먼트 폴트를받을 이유가 이해가 안 돼요. 각 노드에 동적으로 메모리를 할당해야합니까? 여기
void begin_list(std::pair <Key, T> h)
{
size=1;
head->node_data=h; // <= DEREFERENCING head WITHOUT HAVING INITIALIZED IT
head->prev=NULL; // <== SAME HERE
}
아마 당신은 동적으로 storage
의 생성자에서 유형 node
의 객체를 할당하는 의미 :
'각 노드마다 동적으로 메모리를 할당해야합니까?' 당연히 당신은해야합니다. – john