删除向量中的指针会导致错误

deleting pointer in vector causes error

我一直在做一个学校项目,在测试阶段,当我们想要删除(取消分配)任何东西时,我们不断收到反复出现的错误。我们的 classes 非常基础,不使用指针作为数据成员。管理这两个 classes 之间交互的 class 使用指针向量来管理它们(在这种情况下更容易一些)。我们扫描了所有代码以查找双重删除或其他类似错误。 以下是可能导致错误的片段:

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;

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] 是一个数组而不是一个整数,所以你应该使用 new int[nodes.size()];

有关 new[] here 的更多信息。