C 获得了C 自动对象



我想知道C 文件中的类。我确实有一个名为"节点"的类,一个名为" edge"的类。在此类节点中,节点是这样的方法:

Edge calculateEdgeTo(Node&);

,然后是带有以下操作的主文件:

Node* n1 = new Node(...);
Node* n2 = new Node(...);
delete n1;
delete n2;

这有效..但是如果我:

Node* n1 = new Node(...);
Node* n2 = new Node(...);
Edge e = n1->calculateEdgeTo(*n2);
delete n1;
delete n2;

我遇到了一个分割错误(我认为N1已经被释放)。如果我尝试在n1上执行其他操作...始终是分段故障。

编辑:

这是函数的代码:

Edge Node::calculateEdgeTo(Node& node){
    return new Edge((*this), (*this));
}

和边缘的构造函数:

Edge::Edge(const Node& src, const Node& tar){
    this->src = &src;
    this->tar = &tar;
}

src和tar是节点上的指针。

编辑结束。

为什么N1从系统中释放出来?我该如何强迫不执行此操作?

Alex

no,C 不会"自动"对象。仅当您在它们上调用delete时,它们才会被删除。

您的代码崩溃的一些可能原因可能是:

  • 您的calculateEdgeTo功能必须做错了什么,这会产生您的segfault,而不是被释放的对象。

  • 当您通过执行*n2取消n2然后将其传递给calculateEdgeTo时,您必须确保将n2的正确数据复制到calculateEdgeTo函数中使用的Node中。您需要编写复制构造函数以确保这有效。

相关内容

  • 没有找到相关文章

最新更新