65,209
社区成员
发帖
与我相关
我的任务
分享
#include <string>
#include <vector>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
vector < string > ivec;
string str;
cout << "please cin\n";
while (cin >> str)
ivec.push_back(str);
char **pa = new char *[ivec.size()];
size_t i = 0;
for (vector < string >::iterator iter = ivec.begin();
iter != ivec.end(); ++iter, ++i) {
char *pb = new char[(*iter).size() + 1];
strcpy(pb, (*iter).c_str());
pa[i] = pb;
cout << *iter << endl;
}
for (i = 0; i != ivec.size(); ++i)
delete[]pa[i];
delete pa;
return 0;
}
虽然pb是动态创建的,但是
for (vector < string >::iterator iter = ivec.begin();
iter != ivec.end(); ++iter, ++i) {
char *pb = new char[(*iter).size() + 1];
strcpy(pb, (*iter).c_str());
pa[i] = pb;
cout << *iter << endl;
}
pa[i]已经保存了pb的地址. 具体请看: 上面循环里 pa[i] = pb
最后
for (i = 0; i != ivec.size(); ++i)
delete[]pa[i];
作者用这个,轮流把pa[i]释放了。
所以没有内存泄露