为什么我读取访问冲突错误?

时间:2018-04-22 14:23:48

标签: c++ stl

我在Visual Studio 2015环境中以调试模式运行以下C ++程序。

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <stdio.h>

using namespace std;

int main() {

    vector<vector<int>> my_2d_array;
    int total_entries = 10;

    // initialising my 2d vector
    for (int arr_index = 0; arr_index < total_entries; ++arr_index) {
        my_2d_array.push_back(*(new vector<int>()));
    }

    // doing something with my 2d array

    // de-initialsing my 2d vector
    for (vector<vector<int>>::iterator itr = my_2d_array.begin();
        itr != my_2d_array.end(); ++itr) {
        delete &(*itr); // <-- ***CULPRIT LINE. Donno if its legal?***
    }

    getchar();
    return 0;
}

每次我运行上面的程序时,我都会收到读取访问冲突错误&lt;需要知道为什么?我知道删除+迭代器组合不是推荐的,但是没有弄清楚为什么我的代码在前面提到的罪魁祸首中崩溃了。

1 个答案:

答案 0 :(得分:1)

delete &(*itr);形象不对称;元素和存储由vector创建和管理,您不能直接delete

my_2d_array.push_back(*(new vector<int>()));会导致内存泄漏。您通过vector创建了一个new对象,将其复制以构造要插入my_2d_array的元素。在那之后对象丢失了,我们再也不能delete