我一直在研究一个学校项目,在测试阶段,我们在想要删除(取消分配)任何东西时不断收到错误。我们的类非常基础,不使用指针作为数据成员。管理这两个类之间交互的类使用指针向量来管理它们(在这种情况下稍微容易一些)。我们扫描了所有代码以进行双重删除或其他类似错误。 以下是可能导致错误的信息:
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;
答案 0 :(得分:0)
行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的更多信息。