删除向量中的指针会导致错误
Posted
技术标签:
【中文标题】删除向量中的指针会导致错误【英文标题】:deleting pointer in vector causes error 【发布时间】:2018-03-26 05:28:04 【问题描述】:我一直在从事一个学校项目,在测试阶段,我们不断收到错误消息,同时想要删除(取消分配)任何内容。我们的类非常基础,不使用指针作为数据成员。管理这两个类之间交互的类使用指针向量来管理它们(在这种情况下更容易一些)。我们扫描了所有代码以查找双重删除或其他类似错误。 以下是可能导致错误的片段:
delete (nodes[i]);
nodes.erase(nodes.begin() + i);
节点是:
std::vector<Node*> nodes;
我不想给出整个代码,因为它非常大。 现在,从字面上看,任何删除操作都将不起作用,并导致程序崩溃:bad_module_info
谢谢
编辑:
这是一个例子:
int** matrix = new int*[nodes.size()];
for (unsigned int i = 0; i < nodes.size(); i++)
matrix[i] = new int(nodes.size());
for (unsigned int i = 0; i < nodes.size(); i++)
ref[i] = nodes[i]->getId();
cout << ref[i];
//Setting up
for (unsigned int i = 0; i < edges.size(); i++)
int from = edges[i]->getStartNode();
int to = edges[i]->getEndNode();
int indexRow = getRefrenceFromID(ref, nodes.size(), from);
int indexCol = getRefrenceFromID(ref, nodes.size(), to);
matrix[indexRow][indexCol] = 1;
//print the contents of the matrix
for (unsigned int i = 0; i < nodes.size(); i++)
cout << ref[i] << "|"; //first print the ID of the row
for (unsigned int j = 0; j < nodes.size(); j++)
cout << matrix[i][j];
cout << endl;
for(unsigned int = 0; i < nodes.size();++i)
delete[] matrix[i];
delete[] matrix;
delete[] ref;
【问题讨论】:
我不想给出整个代码,因为它太大了。 这是合适的。请通过minimal reproducible example 重现您的问题。否则,很难为您提供帮助。 你已经通过new int(nodes.size());
创建了一个元素,使用new int[nodes.size()];
这确实有效!感谢您的帮助。
【参考方案1】:
matrix[i] = new int(nodes.size());
行是问题的根源。
new int(x); // Create a single int with value x
new int[x]; // Create array of x ints
看起来matrix[i]
应该是一个数组而不是单个 int,所以您应该使用 new int[nodes.size()];
更多关于new[]
here的信息。
【讨论】:
以上是关于删除向量中的指针会导致错误的主要内容,如果未能解决你的问题,请参考以下文章