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

时间:2018-03-26 05:28:05

标签: c++ c++11 pointers delete-operator

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

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;

1 个答案:

答案 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的更多信息。