使用
我有一个具有元素向量和图形元素的类,该元素定义了这些元素之间的相邻:
class Graph
{
Public:
Graph::update(const Data& data);
[...]
private:
std::vector<Node> nodeList;
Node* root;
[...]
}
Graph::update(const Data& data)
{
int n=3;
std::vector<Node*> newNodes;
nodeList.push_back(Data(parameters1));
nodeList.push_back(Data(parameters2));
nodeList.push_back(Data(parameters3));
size=nodeList.size();
for(int i=0;i<n;i++)
newNodes.push_back(&(nodeList[size-i-1]));
node->addChildren(newNodes,n);
}
图形结构是递归的:
class Node
{
public:
[...]
void addChildren(std::vector<Node*> nodes,int& n);
[...]
private:
std::vector<Node*> children;
std::vector<Data> data;
std::vector<Node*> brothers;
[...]
}
这里有问题的方法:
void Node::addChildren(std::vector<Node*> nodes, int& n)
{
for(int i=0;i<n;i++)
{
children.push_back(nodes[i]);
}
}
即使我尝试插入函数范围中创建的空指针或元素,
函数addChildren
也会产生分割故障。调试器停止在" newallocator.h"文件中,由push_back
。
我看不到函数 addChildren
的错误,所以我假设您的问题在调用该函数的node
实例中。无论是正确创建并且尚未被销毁还是移动,它在代码提取物中都不可见。
如果您的node
指针没有指向现有对象,则可以解释分段故障。