我在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;需要知道为什么?我知道删除+迭代器组合不是推荐的,但是没有弄清楚为什么我的代码在前面提到的罪魁祸首中崩溃了。
答案 0 :(得分:1)
delete &(*itr);
形象不对称;元素和存储由vector
创建和管理,您不能直接delete
。
my_2d_array.push_back(*(new vector<int>()));
会导致内存泄漏。您通过vector
创建了一个new
对象,将其复制以构造要插入my_2d_array
的元素。在那之后对象丢失了,我们再也不能delete
。