vector 寄存指向数组的指针 内存释放出错

vector 存放指向数组的指针 内存释放出错
定义了一个结构

struct SV
{
 float x,y,z;
};

又定义了一个类

class SVHolder
{
SV* apV;
int   nV;
};

现在有一个vector <SVHolder*> m_v;
是这样使用的:

SVHolder* pNewHolder = new SVHolder;
pNewHolder->apV = new SV[5];
// 省略为SV[5]的赋值操作代码



现在轮到释放m_v内存的时候了,我是这么做的:

for( int i = 0; i < m_v.size(); ++i )
{
SVHolder* pTmpHolder = m_v.at(i);
delete[] pTmpHolder->apV;
apV = NULL;
delete pTmpHolder;
pTmpHolder = NULL;
}
m_v.clear();


这样程序退出时,在m_v.clear()下一步下断点没有问题,但是继续运行就会出现VA location的类似错误
注释掉这段释放内存的代码就不会报错,当然了,必然会有内存泄露了
请问这是为什么呢
------解决方案--------------------
继续运行是运行什么代码?
------解决方案--------------------
首先,楼主代码中发现几个明显错误

1.
class SVHolder
{
SV* apV;           //这里是私有成员,对象无法访问
int   nV;
};

2.
for( int i = 0; i < m_v.size(); ++i )
{
SVHolder* pTmpHolder = m_v.at(i);
delete[] pTmpHolder->apV;
apV = NULL;                     // 应该为pTmpHolder->apV = NULL;
delete pTmpHolder;
pTmpHolder = NULL;
}
m_v.clear();

其次,经过对错误的修改后,我自己测试运行并没发现错误,我的代码如下:


#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;

struct SV
{
 float x,y,z;
};

class SVHolder
{
public:
SV* apV;
int   nV;
};

int _tmain(int argc, _TCHAR* argv[])
{
vector<SVHolder*> v;
for(int i = 0; i < 5; i++)
{
SVHolder* pNewHolder = new SVHolder;
pNewHolder->apV = new SV[5];
v.push_back(pNewHolder);
}
for( int j = 0; j < 5; ++j )
{
SVHolder* pTmpHolder = v.at(j);
delete[] pTmpHolder->apV;
pTmpHolder->apV = NULL;
delete pTmpHolder;
pTmpHolder = NULL;
}
v.clear();
cin.get();
return 0;
}
这样虽然没错,但是建议类成员的析构最好还是在析构函数中完成