读书人

vectorlt;char*gt; 的内存释放有关问题

发布时间: 2012-02-27 10:00:22 作者: rapoo

vector<char*> 的内存释放问题
我在主函数里,有一段代码:
Func(vector <char*> vecString,..)
{
...
}
main()
{
vector <char*> vecString;
for(int i=0;i <3;i++)
{
char* pAdd = new char[5];
ZeroMemory(pAdd,5);
sprintf(pAdd, "%d "i*1000+999);
vecString.push_back(pAdd);
pAdd=NULL;
}
Func(vecString,...);
}
//在调用完Func后需要进行vecString的内存释放。由于vecString里存的是char指针,进行内存释放的时候就需要先把char*对应的内存释放,再把vecString的内存释放,我现在不知道如何进行了。
曾经写过一个如下:
int nSize=vecString.size();
for (int i=0;i <nSize;i++)
{
delete [] vecString[nSize-i-1];
vecString.pop_back();
}
但似乎工作的并不好。不知各位大虾有何妙计阿。小弟再次谢过啦

[解决办法]
如果是字符串数组的话,建议使用vector <string> 或者vector <wstring> 。
[解决办法]
优先考虑用vector <string>
既然是C++程序,就应该尽量忘了char *
如果真有好东西不肯用,那就只好
int nSize=vecString.size();
for (int i=0;i <nSize;i++)
{
delete [] vecString[i];
}
vecString.clear();

[解决办法]
不需要vecString.pop_back()。vecString析构时会清除自己的资源。
[解决办法]
for(int i=0;i <nSize;i++)
{
delete []vecString.pop();
}
把存进去的地址探出来delete就好了
[解决办法]
优先考虑用vector <string>
既然是C++程序,就应该尽量忘了char *
如果真有好东西不肯用,那就只好
int nSize=vecString.size();
for (int i=0;i <nSize;i++)
{
delete [] vecString[i];
}
vecString.clear();
[解决办法]
最后再清空,或者反向一个一个删除都可以

[解决办法]
void free( char* p )
{
delete p;
}

std::for_each( vecString.begin(), vecString.end(), free);
[解决办法]
template <class T>
void _SafeReleasePtrVec(T t)
{
T::iterator iter = t.begin();
for(; iter != t.end(); ++iter)
{
if((*iter) != 0)
delete [] (*iter);
(*iter) = 0;
}
}
[解决办法]
new出五个然后一个一个删肯定有问题了,这写法很危险。

读书人网 >C++

热点推荐