下面是我的链表模板类,我在"LinkedListTemplate.h":
template<typename T> class Node{
T data;
Node<T> *next;
public :
void setData(T new_data){
data = new_data;
}
Node<T>* &getNext(){
return next;
}
T getData(){
return data;
}
};
template<typename T> class LinkedList{
private :
Node<T> **head_ref;
public :
LinkedList(){
(*head_ref) = NULL;
}
void insert(T data){
Node<T> *new_node = new Node<T>;
new_node->setData(data);
new_node->getNext() = (*head_ref);
(*head_ref) = new_node;
}
void printList(){
Node<T> *current = (*head_ref);
while(current != NULL){
cout << current -> getData() << " ";
current = current -> getNext();
}
}
Node<T> *getHead() const{
return (*head_ref);
}
void deleteList(){
Node<T> *current = (*head_ref);
Node<T> *next;
while(current != NULL){
next = current -> getNext();
delete current;
current = next;
}
(*head_ref) = NULL;
}
};
所以我想使用这个模板类来创建一个类名Set用于管理一组整数,它有一个构造函数使用给定的数组和大小,我定义了这个类在"4-5 "头
class Set{
private :
LinkedList<int> l;
public :
Set() {}
Set(int a[], int size){
for(int i = 0; i < size; i++)
l.insert(a[i]);
}
~Set(){
l.deleteList();
}
};
所以在我的主程序中,当我使用默认构造创建对象时,它正常工作,但当我初始化一个int数组时,我得到了分割错误,如下所示:
int main()
{
Set s1;
cout << s1; // This work fine
int a[] = {2,3} // When i initialize it i got segmentation fault
return 0;
}
template<typename T> class LinkedList{
private :
Node<T> **head_ref;
public :
LinkedList(){
(*head_ref) = NULL; // HERE
}
你认为head_ref
在我标记的直线上指的是什么?
您从未初始化head_ref
。所以当你执行(*head_ref)
时,你是在解引用一个不指向任何东西的指针。