C++小问题求证..

pengpeng2018 2009-08-09 08:42:17
MinHeap::MinHeap(int arr[],int n)
{
MaxHeapSize = DefaultSize < maxSize ? maxSize : DefaultSize;
heap = new int[MaxHeapSize];
heap = arr;//复制堆数组
CurrentSize = n;//建立当前大小
int currentPos = (CurrentSize - 2) / 2;
while(currentPos >= 0)
{
FilterDown(currentPos,CurrentSize - 1);
currentPos--;
}
}

这个函数是数据结构最小堆的构造函数之一,复制一个数组并调整成堆,如上代码包括注释都是书上的.传递进来的参数是指向数组首元素地址的指针,接着又对成员指针heap赋值(也就是数组首元素地址),相当于让heap也指向该数组首元素.那么这句heap = new int[MaxHeapSize]还有什么用呢?是不是完全没有达到复制的效果呢?...书上为什么说复制堆数组呢? 验证书上的错误.
...全文
95 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dave888Zhou 2009-08-09
  • 打赏
  • 举报
回复
从传的参数来看,arr数组是直接创建的数组,在栈上,而heap指向的new出来的数组是创建在堆上的。你用heap=arr,确实是直接让成员指针heap指向了arr数组的首个元素,根本就没有复制。而且还导致原来new出来的内存泄露(再也访问不到了)。可见你书上的错了,不但没有达到复制效果,还导致内存泄露。

要复制的话,用一个循环,heap[i]=arr[i]。
十八道胡同 2009-08-09
  • 打赏
  • 举报
回复
heap = new int[MaxHeapSize]这个是申请空间
为复制数组做空间准备,
数组不能heap = arr;这样赋值,得一个一个来。
baihacker 2009-08-09
  • 打赏
  • 举报
回复
heap = arr;//复制堆数组

不行...
要一个元素一个元素地用=
或者用memcpy...

"指向数组首元素地址的指针" ->" 指向数组首元素的指针"

你的书上错了.

65,184

社区成员

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

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