List(){list=0;}中,list没有分配内存就赋值

解决方案 »

  1.   

    list没有分配内存?
    这是怎么说?
      

  2.   

    我是在List的构造函数中初始化list值的,为什么还会没有分配内存?
      

  3.   

    to: baiyucsdn(西瓜太郎)
    这不是和我的一样吗?
      

  4.   

    int List::insert(int d)
    {
    Item *pt=new Item(d);
    pt->next=list;
    list=pt;
    return d;
    }
    list是分配了内存,它指向的是pt的地址,但pt在该函数结束后就被释放了,你的程序再给详细一点,最好把Item的代码也给出,不然不知道怎么改才符合你的要求。
      

  5.   

    好的
    Item定义为:
    class Item  
    {
    public:
    int data;
    Item *next;
    friend class List;
        Item(int d=0){data=d;next=0;}
    Item();
    virtual ~Item();
    };
      

  6.   

    我在单步执行时,只能执行到pt->next=list;然后就出现:
    unhandled exception in the test.exe:0xC0000005:Access Violation
    之后就不能运行下去了。
      

  7.   

    to: baiyucsdn(西瓜太郎):
    我试了你的方法,不过还是出现同样的问题。
      

  8.   

    你构造函数中的list初始化错了,Item中有两个值,而你只给一个list=0;
    两种方法:
    一:
    在Item中的构造函数中把Item的值初始化好;
    二:
    在List中的构造函数中改为{list.data=0;list.next=NULL;}
      

  9.   

    我试了你的方法,不过不行。
    我觉得list=0,这样是没有错的。
      

  10.   

    我现在真是搞不懂,为什么会出现在“list=0”之后,pt->next=list会不行?
    我的一个同学也是这样写的,但他的可以,这真是怪事。
    他是这样写的:
    OpList::OpList()
    {
    list=0;
    hlist=0;
    }
    ItemData *list;
    ItemData *hlist;int OpList::insert(int d)
    {
    ItemData *pt=new ItemData(d);
    pt->next=list;
    list=pt;
    return d;
    }
    我和他的是一样的,不过他可以运行我的去却不能。
      

  11.   

    你先检查一下new返回的是不是NULL?
      

  12.   

    对不起,看错了,同意楼上的,先检查一下new返回的是不是NULL?