今天写啦一个关于堆的数据结构,一直找不到错误
#include <iostream>
#define BUFFERLEN 10
using namespace std;
class Heap
{
public:
Heap();
~Heap();
void InsertHeap(int data);
void TraverBuffer()const;
protected:
int * ReMallocMemory(int *buffer);
void ChangeValue(int firstindex,int anotherindex);
private:
int m_len;
int *m_buffer;
//int m_buffer[10];
};
Heap::Heap()
{
m_len = 0;
m_buffer = new int[BUFFERLEN];
}
Heap::~Heap()
{
m_len = 0;
delete []m_buffer;
}
void Heap::TraverBuffer()const
{
cout<<endl;
for(int i = 0;i<m_len;i++)
{
cout<<m_buffer[i]<<" ";
}
cout<<endl;
}
int * Heap::ReMallocMemory(int *buffer)
{
int *pBuf = new int[2*sizeof(buffer)];
memcpy(pBuf,buffer,sizeof(buffer));
delete []buffer;
return pBuf;
}
void Heap::ChangeValue(int firstindex,int anotherindex)
{
int buf = m_buffer[firstindex];
m_buffer[firstindex] = m_buffer[anotherindex];
m_buffer[anotherindex] = buf;
}
void Heap::InsertHeap(int data)
{
int parentindex = (m_len-1)/2;
int childindex = m_len;
m_len++;
if(m_len > sizeof(m_buffer))
m_buffer = ReMallocMemory(m_buffer);
m_buffer[childindex] = data;
while(childindex>0 && m_buffer[parentindex] < m_buffer[childindex])
{
ChangeValue(parentindex,childindex);
childindex = parentindex;
parentindex = (parentindex-1)/2;
}
}
int main()
{
Heap myHeap;
myHeap.InsertHeap(5);
myHeap.InsertHeap(4);
myHeap.InsertHeap(3);
myHeap.InsertHeap(8); //添加到这没有问题;
myHeap.InsertHeap(7); //添加7就会出现问题;
myHeap.TraverBuffer();
}
加实现了一个Insert方法,假如将Heap类的成员改成int buffer[10];就一点问题没有,但改成int *buffer就会出现问题了,
[解决办法]
sizeof(m_buffer) == 4 不是 10
今天写啦一个关于堆的数据结构,一直找不到异常
今天写啦一个关于堆的数据结构,一直找不到错误#include iostream#define BUFFERLEN 10using namespace s
