堆的问题错在哪里??
#include<stdio.h>#include<stdlib.h>
struct heap{
int*data;
//定义堆的数组域的指针
int length;
//定义堆的长度指针
int rear;
//定义堆尾指针
};//定义一个堆类型
void inint(struct heap**bt,int n)
//初始化堆
{
(*bt)->data=malloc(sizeof(int)*n);
//分配堆空间并使头指针指向此段内存
(*bt)->length=0;
(*bt)->rear=0;
}
void insert(struct heap *bt,int x)//向堆中插入一个新的元素
{
int i,temp,j;
bt->rear++;
bt->length++;
bt->data[bt->rear]=x;
//将新元素赋到堆尾
i=bt->rear;
for(;i!=1;){
j=i/2;
if(bt->data[i]>bt->data[j]){
temp=bt->data[i];
bt->data[i]=bt->data[j];
bt->data[j]=temp;
i=j;
}
else break;
}
//调整新的堆的排列,使其符合大根堆的特点
}
void print(struct heap* bt)
{
int i;
if(bt){
for(i=1;i<=bt->length;++i)
printf("%d",bt->data[i]);
}
}
main()
{
struct heap*bt;
int a[5]={2,4,6,23,32};
int i,n;
scanf("%d",&n);
inint(&bt,n);
for(i=0;i<5;++i)
insert(bt,a[i]);
print(bt);
printf("\n");
free(bt);
}
这个程序不知道为什么在TC下运行正确,但是在VC下却说指令引用了不能写的内存。这个程序调用内存到底错在哪里??