请大侠给看一下这个内存问题?

jfsun3 2008-11-08 11:56:34
请各位看一下这段代码:
#include <iostream>
#include <vector>
using namespace std;

class CS
{
public:
CS();
~CS();
void init(int num);
public:
int kj;
int num;
int index;
int* no;
};
CS::CS ()
{
kj=num=0;index=0;no=NULL;
}
CS::~CS ()
{
delete [] no;
}
void CS::init(int number)
{
kj=0;
num=number;
index=0;
no=new int[number];
}

void fun()
{
cout<<sizeof(CS)<<endl;
const int size=10000;
cout<<"in"<<endl;
getchar(); //位置1
{
vector<CS> pcs(size);

for(int ii=0;ii<size;++ii)
{
pcs[ii].init (4);
pcs[ii].no [0]=12;
pcs[ii].no [1]=13;
pcs[ii].no [2]=14;
pcs[ii].no [3]=15;
}
}
cout<<" out "<<endl;
getchar(); // //位置2
}
int main()
{
fun();
return 0;
}

问题:
我在位置1处用资源管理器查看,程序用的内存是1152K,
在位置2处用资源管理器查看,程序用的内存是1208K,多出了56K的内存,
可是我不明白程序那里有内存泄露呢?
请指教,谢谢了!!

...全文
163 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wudeshou82666 2008-11-08
  • 打赏
  • 举报
回复
泄露点内存没什么的,现在都那么大的内存。哈哈!不要重复泄露就好了。。。
机智的呆呆 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 arong1234 的回复:]
它的vector已经析构了,没啥大问题
引用 3 楼 Demon__Hunter 的回复:
个人认为由于vector应有自己的内存管理的造成的~~~
vector维护一个内存池,当内存池有空闲的存储空间时,具有可能出现楼主所述的情况~~~

个人见解,高手见笑~~
[/Quote]
确实如此,不跟vector有关,没有仔细看代码~~
arong1234 2008-11-08
  • 打赏
  • 举报
回复
VC中看内存泄漏最简单的办法是在IDE中执行程序,让他跑完。如果有内存泄漏,编译器的错误窗口会告诉你有泄漏的。通过外部观察看到的内存增长、内存减少都不能证明内存泄漏,因为内存泄漏只有当进程结束才能证明是否真的有

从外部观察,当且仅当进程的内存持续性的大量的增长才需要怀疑内存泄漏。小的几个MB之下的内存增减根本说明不了啥
arong1234 2008-11-08
  • 打赏
  • 举报
回复
它的vector已经析构了,没啥大问题
[Quote=引用 3 楼 Demon__Hunter 的回复:]
个人认为由于vector应有自己的内存管理的造成的~~~
vector维护一个内存池,当内存池有空闲的存储空间时,具有可能出现楼主所述的情况~~~

个人见解,高手见笑~~
[/Quote]
arong1234 2008-11-08
  • 打赏
  • 举报
回复
首先:除非你用VirtualAlloc分配内存,否则你的内存分配不会直接表现在进程使用的内存上。new/malloc是在堆上分配内存,而堆内存一般在你new和alloc之前就分配好了,也就是 你新分配一个内存,不一定会增加你进程使用内存数量,除非你的堆不够用了,才会增加堆的大小和数量,导致进程使用内存增加

其次,堆内存不是说你不用了就立刻释放,否则性能太差。

因此你这种检查方法是不正确的,也不可能检查出内存泄漏的(实际你那没啥泄漏)。
机智的呆呆 2008-11-08
  • 打赏
  • 举报
回复
个人认为由于vector应有自己的内存管理的造成的~~~
vector维护一个内存池,当内存池有空闲的存储空间时,具有可能出现楼主所述的情况~~~

个人见解,高手见笑~~
baihacker 2008-11-08
  • 打赏
  • 举报
回复
内存占用多了并不等于内存泄漏啊.
如1楼所说,应该换地方看.
xhs_lh04 2008-11-08
  • 打赏
  • 举报
回复
vector <CS> pcs(size); 分配的内存空间
此时函数未退出,pcs类未析构释放,所以占着空间你要在main里看或者退出后来看是不是存在内存泄漏
jfsun3 2008-11-08
  • 打赏
  • 举报
回复
感谢各位的热心!!
太乙 2008-11-08
  • 打赏
  • 举报
回复
up~~~~~~~

nothing~~

65,211

社区成员

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

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