c++ primer 第四版习题 4.34 问题

tomydreamlj 2014-05-16 03:38:42
编写程序读入一组 string 类型的数据,并将它们存储在vector 中。接着,把该 vector 对象复制给一个字符指针数组。为 vector 中的每个元素创建一个新的字符数组,并把该 vector 元素的数据复制到相应的字符数组中,最后把指向该数组的指针插入字符指针数组
#include<iostream>
#include<vector>
#include<string>
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也是动态创建的,为什么不释放一下?
...全文
166 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomydreamlj 2014-05-16
  • 打赏
  • 举报
回复
有道理,3Q
zybjtu 2014-05-16
  • 打赏
  • 举报
回复

#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]释放了。 所以没有内存泄露
杀意已决 2014-05-16
  • 打赏
  • 举报
回复
pb局部变量,生命周期仅限于循环体,而且是一次。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧