单链表C ++ ostream和istream - 输出内存地址

时间:2011-04-25 18:44:20

标签: c++ linked-list istream ostream

我真的很陌生,现在正在学习单链表。我正在写一些代码,但我真的很困惑。我正在尝试编写一个read方法和一个write方法。我有一个测试工具我不能改变。我只是想能够读取流并输出流,因此它不会带回内存地址。

任何人都可以用一种非常简单的方式解释,并帮我修复这段代码吗?

void SLLIntStorage::Read(istream& r)
{
    char c[13];
    r >> c;
    r >> NumberOfInts;

    Node *node = new Node;
    head = node; //start of linked list

    for(int i = 0; i < NumberOfInts; i++) //this reads from the file and works
    {
        r >> node->data;
        cout << node->data << endl;
        node ->next = new Node; //creates a new node
        node = node->next;
    }
}

void SLLIntStorage::Write(ostream& w)
{
    Node *node = new Node;
    head = node;

    for(int i = 0; i < NumberOfInts; i++)
    {
        w << node->data << endl;
        //cout << i << endl;
    }
}

并在头文件中

#pragma once

#include <iostream>

using namespace std;

struct Node
{
    int data; //data in current node
    Node *next; //link of address to next node
};

class SLLIntStorage
{

private:
    Node *head;// start of linked list
    //Node *tail;
    Node current; //current node
public:
    void setReadSort(bool);
    void sortOwn();

    void Read(istream&);
    void Write(ostream&);

    void add(int i);
    void del();

    bool _setRead;
    int NumberOfInts;

    SLLIntStorage(void);
    ~SLLIntStorage(void);
};

inline ostream& operator<< (ostream& out, SLLIntStorage& n) 
{
    n.Write(out); 
    return out;
}
inline istream& operator>> (istream& in, SLLIntStorage& s) 
{
    s.Read(in); 
    return in;
}
谢谢你!

2 个答案:

答案 0 :(得分:3)

你的写法似乎有些搞砸了。 您想要编写元素,而不是创建新元素。这样的事情会更好:

void SLLIntStorage::Write(ostream& w)
{
    Node *node = head;

    for(int i = 0; i < NumberOfInts; i++)
    {
        w << node->data << endl;
        node = node->next;
        //cout << i << endl;
    }
}

顺便说一下:你的实现方式似乎对我有用,你可能会有很大的内存泄漏。一旦Read方法在行中被调用两次,就会丢弃旧列表而不释放内存。如果在保存另一个文件的同时调用write,你应该考虑你的类应该做什么。附加吗?先删除旧列表?

答案 1 :(得分:1)

在Write()方法中,通过执行

来破坏整个列表
Node *node = new Node;
head = node;

如果你问我,这会用空列表替换整个列表。 NumberOfInts不再正确,您继续打印相同的节点 - >数据NumberOfInts次。

我不知道从哪里开始。