我想知道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
中。您需要编写复制构造函数以确保这有效。