1 c++ pointers runtime-error stdlist c++11
我是编程c ++的新手,所以如果我的源代码不是很精彩,请不要生我的气.
我必须编写一个程序来处理图形中的节点和边缘以供我学习.
std::lists我的源代码中有2个.第一个是存储常规Nodes,另一个是为了保存被调用的节点的类ArticleNodes.通常,所有元素都是指向创建对象的指针.
为了确定一个对象在另一个列表中是否相同,我保存了内存地址并将其与第二个列表中的元素进行比较.如果匹配,则将删除第二个元素.
现在我想删除两个列表中的一个元素:
void Graph::deleteNode(unsigned int nodeNumber)
{
list<Node*>::iterator it = m_nodes.begin();
ArticleNode* pCurrentArticleNode;
for(unsigned int i=1; i<nodeNumber; i++) { it++; }
Node* pCurrentNode = (*it);
for (list<ArticleNode*>::iterator itArticle = m_articlenode.begin(); itArticle != m_articlenode.end(); itArticle++)
{
pCurrentArticleNode = (*itArticle);
if(pCurrentNode==pCurrentArticleNode) { m_articlenode.remove(pCurrentArticleNode); }
}
m_nodes.remove(pCurrentNode);
delete pCurrentNode;
delete pCurrentArticleNode;
}
Run Code Online (Sandbox Code Playgroud)
我可以编译它,但是当我调用该函数时,我的程序只退出返回1.实际上,我发现if子句中的remove-command是问题所在.为什么这不起作用?
您应该使用算法而不是手动执行所有操作:
void Graph::deleteNode(unsigned int nodeNumber)
{
assert (nodeNumber < m_nodes.size());
auto it = std::next( m_nodes.begin(), nodeNumber - 1 );
auto itArticle = std::find( m_articlenode.begin(), m_articlenode.end(), *it );
if( itArticle != m_articlenode.end() )
m_articlenode.erase( itArticle );
delete *it;
m_nodes.erase(it);
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你的代码删除了两次相同的对象.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |