首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大大们来看看吧,错哪了?貌似分配不了内存啊堆的实现

2013-12-16 
大大们来看看吧,哪里错了?貌似分配不了内存啊。堆的实现// 实现堆结构.cpp : 定义控制台应用程序的入口点。/

大大们来看看吧,哪里错了?貌似分配不了内存啊。堆的实现

// 实现堆结构.cpp : 定义控制台应用程序的入口点。
//

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define MAXSIZE 100000

struct Heap
{
int* data;
int len;
int MaxSize;
};

void InitHeap(Heap* heap)
{
heap->data=(int*)malloc(sizeof(int)*MAXSIZE);
heap->len=0;
heap->MaxSize=MAXSIZE;
}

void InsertHeap(Heap* heap,int n)
{
heap->data[heap->len]=n;
heap->len++;
}

int DelHeap(Heap* heap)
{
int temp=heap->data[0];
int count;
for(int i=0;i<heap->len;i++)
{
if(heap->data[i]<=temp)
{
temp=heap->data[i];
count=i;
}
}
for(int i=count;i<heap->len;i++)
{
heap->data[i]=heap->data[i+1];
}
heap->len--;
return temp;
}

int main()
{
Heap* heap=NULL;
InitHeap(heap);
int t;
cin>>t;
for(int i=0;i<t;i++)
{
int n;
cin>>n;
for(int j=0;j<n;j++)
{
int type,data;
cin>>type>>data;
if(type==1)
{
InsertHeap(heap,data);
}
if(type==2)
cout<<DelHeap(heap)<<endl;
}
}
return 0;
}

[解决办法]
Heap* heap=NULL;    
InitHeap(heap);//这里传进去是NULL,而你在InitHeap中却使用了NULL->data NULL->len...能不出错?

void InitHeap(Heap* heap)
{    
heap->data=(int*)malloc(sizeof(int)*MAXSIZE);    
heap->len=0;    
heap->MaxSize=MAXSIZE;
}

应该Heap* heap=new Heap;  
[解决办法]
Heap* heap=NULL;之后直接就用了当然不行,要改为Heap* heap=(Heap*)malloc(sizeof(Heap));

引用:
// 实现堆结构.cpp : 定义控制台应用程序的入口点。
//

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define MAXSIZE 100000

struct Heap
{
int* data;
int len;
int MaxSize;
};

void InitHeap(Heap* heap)
{
heap->data=(int*)malloc(sizeof(int)*MAXSIZE);
heap->len=0;
heap->MaxSize=MAXSIZE;
}

void InsertHeap(Heap* heap,int n)
{
heap->data[heap->len]=n;
heap->len++;
}

int DelHeap(Heap* heap)
{
int temp=heap->data[0];
int count;
for(int i=0;i<heap->len;i++)
{
if(heap->data[i]<=temp)
{
temp=heap->data[i];
count=i;
}
}
for(int i=count;i<heap->len;i++)
{
heap->data[i]=heap->data[i+1];
}
heap->len--;
return temp;
}

int main()
{
Heap* heap=NULL;
InitHeap(heap);
int t;
cin>>t;
for(int i=0;i<t;i++)
{
int n;
cin>>n;
for(int j=0;j<n;j++)
{
int type,data;
cin>>type>>data;
if(type==1)
{
InsertHeap(heap,data);
}
if(type==2)
cout<<DelHeap(heap)<<endl;
}
}
return 0;
}

[解决办法]
void InitHeap(Heap* heap)
{
    heap->data=(int*)malloc(sizeof(int)*MAXSIZE);
    heap->len=0;
    heap->MaxSize=MAXSIZE;
}

heap是null,需要申请内存

热点排行