删除链表中节点指向的动态变量

时间:2015-10-04 08:13:43

标签: c++

我正在为一个中级编程课做作业。我们正在创建一个Cluster类,其中每个Cluster对象都包含Point类中的对象。 Cluster对象的 swipeableView.didStart = {view, location in if self.cardIndex+1 < self.swipeableView.numPrefetchedViews { self.cardIndex++ } } 成员指向LNode对象链接列表的头节点,每个LNode指向一个Point对象:

points

当我尝试重载赋值运算符来处理像Cluster1 = Cluster2这样的表达式时,我的问题出现了。为了防止内存泄漏,我想删除Cluster1指向的整个LNode-s链表,以及每个LNode指向的每个Point。这看起来很简单:

namespace Clustering {

    typedef Point *PointPtr;
    typedef struct LNode *LNodePtr;

    struct LNode {
        PointPtr p;
        LNodePtr next;
    };

    class Cluster {

    private:
        int size;
        LNodePtr points;  // points to head LNode

但是,我的代码只能在没有// Overload assignment operator Cluster& Cluster::operator =(const Cluster& otherCluster) { // checks for equality if (this == &otherCluster) return *this; size = otherCluster.size; // delete old nodes if (points != nullptr) { LNodePtr discard = points; points = nullptr; LNodePtr advance = discard->next; do { cout << "flag " << *(discard->p) << endl; delete discard->p; // this line should delete the Point delete discard; discard = advance; if (advance != nullptr) advance = advance->next; } while (discard != nullptr); } 行的情况下运行。当我包括那条线时,我会得到奇怪的行为。有时,程序将删除每个LNode的Point,直到最后一个LNode,该行导致程序崩溃。我在delete discard->p;行之前放置了一个输出标志,以确认我想要删除的点仍然存在(确实如此)。在其他时候,delete行会导致程序的其他部分失败。

我很感激任何人都可以提供帮助。我试图搜索有关此问题的其他问题,但我找不到任何东西。

0 个答案:

没有答案