社区
C++ 语言
帖子详情
c++ primer中的问题(第六章),急啊,在线等!!!
eintain
2004-04-02 11:28:48
c++ primer第六章最后给出的文本查询类中使用了new申请了内存,可是没有用delete回收内存,只是在构造函数中使用下面的语句:
memset(this,0,sizeof(TextQuery));
请问它是怎么回收内存的啊,写了这句话就不用析构函数了吗
百思不得其解啊,高人快指点我呀
...全文
182
20
打赏
收藏
c++ primer中的问题(第六章),急啊,在线等!!!
c++ primer第六章最后给出的文本查询类中使用了new申请了内存,可是没有用delete回收内存,只是在构造函数中使用下面的语句: memset(this,0,sizeof(TextQuery)); 请问它是怎么回收内存的啊,写了这句话就不用析构函数了吗 百思不得其解啊,高人快指点我呀
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
somedummy
2004-09-03
打赏
举报
回复
好像在后面的部分修改过了这个代码,去看完全版的,应该在第六章最后一节
iwdc
2004-09-03
打赏
举报
回复
我刚看过这一章
可根本就没留意
楼主细心
hkiaipc
2004-09-03
打赏
举报
回复
这个程序确实存在内存泄漏的问题,我在vc6中也发现推出程序后有内存泄漏的提示。可能是作者只是为了举例子把,没有考虑那么多 :)
下面这段代码,加在析构函数中,好像解决了内存泄漏,没怎么仔细试,有兴趣的朋友可以试一下。
delete lines_of_text;
if(text_locations){
delete text_locations->first;
delete text_locations->second;
delete text_locations;
}
if(word_map){
for(map<string,loc*>::iterator iter=word_map->begin();iter!=word_map->end();++iter)
delete iter->second;
delete word_map;
}
freshairfly
2004-09-03
打赏
举报
回复
to iorchis(江楠):
memset(this,0,sizeof(TextQuery));
的意思就是把this指针所指向的内存块所有数据置为0
而这里的this指针指向了一个TextQuery类的实例(即它的非静态成员变量,在这里就是一些指针)
所以memset(this,0,sizeof(TextQuery));这句话就是把TextQuery类的一个实例里的指针置空!
iorchis
2004-09-03
打赏
举报
回复
freshairfly(菜鸟精神)--->我觉得可以啊,如果一个类有好多类成员变量是指针,在构造函数里分别给它们赋值NULL,不如用memset来得快
**************************************************************************
说两句。
赋值NULL是把指针置空,使它不指向任何内存地址。而memset则是设置指针所指内存块的数据,前提则是指针所指的必须是有效的地址。
不知道是不是这样理解!?汗ing.....
freshairfly
2004-09-03
打赏
举报
回复
把 C++ 的 new/delete 内存分配机制与 memset 混合使用的方法很值得质疑。。。至少值得深思
----------------------------------------
我觉得可以啊,如果一个类有好多类成员变量是指针,在构造函数里分别给它们赋值NULL,不如用memset来得快
当然,如果类成员里有其它的非指针(尤其是其它的类对象)成员变量,memset就要慎用了
freshairfly
2004-09-03
打赏
举报
回复
大家有没有注意allocator的使用
我不知道这个类的用法,C++Primer上说
“allocator 类封装了分配和删除动态内存的抽象过程它也是标准库预定义的类实际上它使用了new 和delete。操作符使用这样的分配器类有两个目的通过把容器与内存分配策略的细节分开这可以简化容器类的实现其次程序员有可能实现或者指定其他的内存分配策略比如使用共亨内存”
不知道有没有关系? :(
知行合一2018
2004-04-03
打赏
举报
回复
我看了一下程序,确实没有释放内存。至于memset,是用来将所有成员指针变量初始化NULL的。
Wolf0403
2004-04-03
打赏
举报
回复
把 C++ 的 new/delete 内存分配机制与 memset 混合使用的方法很值得质疑。。。至少值得深思
eintain
2004-04-03
打赏
举报
回复
多谢大家。特别是 davidhopper(疏影横斜) ,看来我是懒惰了点,我刚装的vc7.1把我搞的晕头转向的
再次谢了
zxp2005
2004-04-03
打赏
举报
回复
大家不要纸上谈兵了,虽然我不知道是什么程序,知道的可以调试跟踪一下,看有没有内存泄露呀。同一楼上的。
知行合一2018
2004-04-03
打赏
举报
回复
我刚才调试了一下,存在内存泄漏,应该加上如下析构函数:
~TextQuery() {
delete lines_of_text;
delete text_locations;
delete word_map;
}
zouxueping
2004-04-02
打赏
举报
回复
memset(this,0,sizeof(TextQuery));这句是将申请的内存数据全部置0,内存还是必须释放的。
eintain
2004-04-02
打赏
举报
回复
weixiaohua(我爱Delphi) 说的对;起初我不懂memset(),于是查了手册,知道了memset是初始化内存的,于是更不明白程序中为什么没有delete回收内存了;
高人的书不好随便怀疑啊
所有来请教大家的看法。我都仔细看N +1遍了,也没有看到在哪里回收内存。
编译器一定会回收指针本身占用的内存,但不会回收它所指向的内存(当然是指new分配的),所以会有内存泄漏啊。
我还是想不通为什么没有见到显式的使用delete???????????
郁闷啊!!
weixiaohua
2004-04-02
打赏
举报
回复
没用new分配内存空间的指针变量都由编译器负责清除吧?
凡是用new分配的内存,都需要用delete清除之,这是effectiveC++里说得!
MyClass::MyClass(int ival) : ptr1(0), ptr2(0) //指针变量的初值.
{ }
sunshinee
2004-04-02
打赏
举报
回复
用new申请的内存还需要用memset么?又不是用malloc啊?!
而且我也有个疑问,在C++中是不是在数据成员如果是指针变量,那这个指针的初值在什么地方赋呢?在构造函数中么?
pengzhenwanli
2004-04-02
打赏
举报
回复
真是惭愧。我当年看得时候怎么没有看出来呢。
我确实没有找到内存释放的地方。
eintain
2004-04-02
打赏
举报
回复
怎么会没有new呢,类的成员变量大部分是指针的:
private:
vector<string,allocator> *lines_of_text;
text_loc *text_locations;
map<string,loc*,less<string>,allocator> *word_map;
static string filt_elems;
不用new分配内存怎么有存储空间
还有一些局部变量:
void
TextQuery::
retrieve_text()
{
//……
lines_of_text = new vector<string,allocator>;
//……
}
void
TextQuery::
separate_words()
{
vector<string,allocator> *words = new vector<string,allocator>;
vector<location,allocator> *locations = new vector<location,allocator>;
//……
}
高人们说说见解吧
(我看的电子版的)
vcchunhong
2004-04-02
打赏
举报
回复
大家好
我是新来的
不知道你们说的是什么书
能介绍一下它吗/
我也在学c++
pengzhenwanli
2004-04-02
打赏
举报
回复
我看了一下程序,没有发现使用new分配内存啊!
为什么要是释放。
memset只是将从this开始的内存指针开始,大小为sizeof(TextQuery)的内存块设置为第二个参数的值、
c++
primer
第五版第6章答案
c++
primer
第五版第6章答案
C++
Primer
Plus(第6版)
中
文版编程练习答案--第四章
C++
Primer
Plus(第6版)
中
文版编程练习答案--第四章.pdf
2023
C++
零基础入门视频教程
第6章是指针与引用,该部分是C/
C++
学习的难点,也是众多C/
C++
程序员的噩梦,指针与引用内容是函数的基础,因此提到前面来。 第7章讲解字符串,字符串是一个很复杂的数据类型,在
C++
中
更是复杂,由于
C++
应用范围广,...
C++
Primer
Plus 编程练习源码工程 第12章
C++
Primer
Plus 编程练习源码工程 第12章 ,这是本人自己学习书籍时写的编程练习的源码工程,供大家参考交流。
C++
Primer
Plus(第6版) 课后题答案
自己看书练习编写的
C++
Primer
Plus(第6版)课后题答案
C++ 语言
64,646
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章