0xC00000005未实例化的指针错误

时间:2013-08-17 09:31:33

标签: c++ pointers linked-list

为了更好地理解语言,我正在使用C ++编写一个单链表列表,而且我已经碰壁了。

可悲的是,这个标题几乎是我能用错误弄清楚的。 herehere似乎都提出了一些我试图无法实施的答案。

main.cpp中:

#include <iostream>
#include <string>
#include "LinkedList.h"
#include "Node.h"

using namespace std;

int main()
{
    LinkedList<string> moo2;
    moo2.insertAtFront("one");
    moo2.insertAtFront("two");
    moo2.insertAtFront("three");
    moo2.insertAtFront("four");
    cout<<moo2.toString() << endl;

    cin.ignore(1);
    return 0;
}

LinkedList.h:

#pragma once
#include "Node.h"
#include <string>
#include <sstream>

template <class type>
class LinkedList
{
private:
    int size;
    node<type> *head; 

public:
    LinkedList()
    {
        head = NULL;
        //head = (node<type>*)malloc(sizeof(node<type>));
        size = 0;
    }
    /*LinkedList(const LinkedList<type> &x)
    {
        head = NULL;
        //head = (node<U>*)malloc(sizeof(node<U>));
        size = 0;
    }*/

    bool insertAtFront(type obj)
    {
        node<type> *temp;
        temp = (node<type>*)malloc(sizeof(node<type>));
        temp->data = obj;
        temp->next = head;
        head = temp;

        size++;
        return true;
    }

    std::string toString()
    {
        std::stringstream value;
        node<type> *i = head;
        while(i != NULL)
        {
            value << i->data;
            if(i->next != NULL)
                value << ", ";
            i = i->next;
        }
        return value.str();
    }
};

node.h:

#pragma once
#include <string>

template <class type>
struct node
{
    type data;
    node *next;

    node() 
    {
        data = NULL;
        next = NULL;
        //data = new type();
        //next = (node<U>*)malloc(sizeof(node<U>));
    }
    node(type)
    {
        data = type;
        next = NULL;
        //next = (node<U>*)malloc(sizeof(node<U>));
    }
    node(type, node *)
    {
        data = type;
        next = next2;
    }
    /*node(const node &x)
    {
        data = new type(x->data);
        next = new x->next;
    }*/
};

我不知道(无论如何),哪个变量正在创建错误,因为它可能是LinkedList&#39; s * head(或head-&gt; data或head-&gt; next)或者它可能是节点*下一个。

真正奇怪的是,对于我迄今为止尝试过的任何其他参数化类型(int,double,long,char,char *),代码完全正常。实际上我甚至可以使用char *来实现与字符串列表相同的目标。不过,我想知道为什么我会遇到问题以及可以采取的任何措施来解决问题。

1 个答案:

答案 0 :(得分:3)

使用new代替malloc

malloc只为给定的类型或大小分配内存,它不会调用构造函数。