2011-10-23 74 views
1

我试图创建一个双向链接列表,其中每个列表都有第一个节点,最后一个节点和num_elements。但是,出于某种原因,当我尝试在UseList.cpp文件中测试代码时,我无法将num_elements设置为默认值为零。不能让构造函数运行

让我告诉你我是什么意思:

在List.h:

template <class L> 
class List 
{ 
    private: 
     Node<L> *first; 
     Node<L> *last; 
     int num_elements; 
    public: 
     // constructors and destructors 
     List(); 
    [...] 
} 

[...] 

template <class L> 
List<L>::List() { 
    first = NULL; 
    last = NULL; 
    num_elements = 0; 
} 

[...] 

这是低下来list.h显示方法:

template <class L> 
// Print out the data in each node separated by a space. 
void List<L>::show() { 
    cout << num_elements << endl; 
    Node<L> *current_node = first; 
    while (current_node != NULL) { 
     cout << current_node->data << " "; 
     current_node = current_node->next; 
    } 
    cout << endl; 
} 

注意,有是一个cout语句来打印num_elements。

这是UseList.cpp的相关部分:

int main (int argc, char *argv[]) { 
    cout << "-----------------------------------------" << endl; 
    cout << "----------------LIST ONE-----------------" << endl; 
    cout << "-----------------------------------------" << endl; 

    List<int> *list1; 
    srand(time(NULL)); 

    list1->show(); 
[...] 

当节目叫,它打印出“1”,并给了我一个分段错误。为什么num_elements默认为“1”而不是“0”?

当我在List<L>::List() {做了清点,没有打印...(这意味着构造从来没有运行?)

感谢您的帮助!

回答

3

您正在将指针声明为List<int>,而不是将其初始化为任何内容。

2

您已创建一个指向List<int>对象的指针,但没有对象。所以,目前,由于指针是“悬挂”的,你的程序将会出现分段错误。当您尝试使用->取消引用时,您正在访问不属于您的内存,并且失败。为了解决这个问题,只需分配一个新的列表对象:

List<int> *list1 = new List<int>(); 

不要忘记稍后释放它:

delete list1; 

你的另一种选择是只是没有使用动态内存。如果你不需要,你不应该使用它。

List<int> list1; 

list1.show() 
+0

实例这是完美的。谢谢!一旦StackOverflow说10分钟结束,我会接受答案。 –

0
List<int> *list1; 

声明list1是一个指针。

List<int> *list1 = new List<int>(); 

实际上创造的List

相关问题