链表空指针错误c ++

时间:2017-12-27 13:42:13

标签: c++

我有一个从文件中计数的项目。由于这是一个学校项目,我不允许使用大多数图书馆而是基本图书馆。因此我决定使用哈希映射。但我的链表给出了一个空指针异常。确切地说“抛出异常:读取访问冲突。 是0xCCCCCCCC。发生了。我搜索了很多寻找解决方案,但我找不到任何东西。谢谢你的时间。

public: liste() {
        head = NULL;
        tail = NULL;
    }

    void createnode(string value) {
        liste();
        node* temp = new node;
        temp->data = value;
        temp->next = NULL;

        if (head == NULL) { // get error here!!!!

            head = temp;
            tail = temp;
            temp = NULL;
        }

        else {
            tail->next = temp;
            temp = tail;
        }
    }

        int main()
    {   
        struct site {
            int count;
            string name;
        };  
        unsigned long int i=0;
        unsigned int x=0;
        ifstream theFile("access_log");
        string word;
        liste* table[100000];
        site list[10];

        while (theFile >> word) {   
            if (word.find(".")!=-1) {
                if (word.find("H") == -1) {
                    x=(int)hashG(word);
                    if (x < 100000) {                   
                        table[x]->createnode(word);
                    }
                }
            }

        }
        for (int i = 0; i < 100000; i++) {
            cout << table[i]->length() << "   " << table[i]->getData() << endl;
        }   
        return 0;
    }

2 个答案:

答案 0 :(得分:1)

在这里创建一个包含10000个侦听指针的数组

liste* table[100000];

但是你从不创建任何指向它们的侦听对象。 稍后你想调用成员函数

table[x]->createnode(word);

由于您的表中指针仍未初始化,因此您的呼叫会崩溃。

我的假设是你希望 table 成为一个liste对象数组

liste table[100000];

我还没有得到的是你在 createNode 函数中调用 liste()(构造函数?)的原因。

答案 1 :(得分:0)

显然没有初始化你的类数组会导致this.adding修复它。

for ( i = 0; i < 100000; i++)
        {
            table[i] = new liste;

        }

自我注意:如果他们在船上告诉我们,不要看有关代码实现的教程。人们可能会忘记事情。