不能通过malloc

时间:2014-05-11 21:05:44

标签: c pointers malloc heap

你好我试图在c中创建一个堆!这是我的堆结构。

struct heap{
   double* array;
   int maxSize;
   int currentSize;
};

这是我的主要内容:

int n;
double  *array1,hmax;
struct heap *h;
int i;

printf("\n Enter the number of elements: ");
scanf(" %d",&n);
array1=(double*)malloc(sizeof(double)*n);
printf("\n Forming the heap please wait...\n");
for( i=1;i<=n;i++ ){
     array1[i]=(double)rand()/1000;
     printf("%.2f /",array1[i]);
}

printf("\n Now the array in heap form is: ");
 for( i=1;i<=n;i++ ){
      printf("\n %.2f",array1[i]);
 }
h=createHeap(array1,n); 

createHeap方法是这样的:

struct heap* createHeap( double array1[],int length ){

 int i;

 struct heap *h=(struct heap*)malloc(sizeof(struct heap*));
 if( !h ){
     printf("No free memory system exit...\n");
     abort();
 }

 h->maxSize=length;
 h->currentSize=0;

 h->array=(double*)malloc(sizeof(double)*(h->maxSize+1));
  printf("here");
 if( !h->array ){  
     fprintf(stderr, "Not enough memory!\n");
     abort();
 }

 for( i=0; i<length; i++ ){
      h->array[i+1]=array1[i];
 }
 h->currentSize=length;

 for( i=h->maxSize/2; i>0; i-- ){
      heapify(h,i);
 }

 return h;

在这个方法中我创建并插入堆中的所有双数。我不能通过数组malloc。我尝试了一切,但仍然无法使其发挥作用! 任何帮助是极大的赞赏, 谢谢你们。

3 个答案:

答案 0 :(得分:2)

问题出在其他地方。 (虽然前面提到的malloc 也是问题。)

您没有在array例程中正确初始化初始结构main

array1=(double*)malloc(sizeof(double)*n);
printf("\n Forming the heap please wait...\n");
for( i=1;i<=n;i++ ){
     array1[i]=(double)rand()/1000;
     printf("%.2f /",array1[i]);
}

这会将数据写入array1[1]array1[n],但最后一个值在C中无效。长度 n 的数组从0开始并结束在n-1。将循环更改为

for (i=0;i<n;i++)

最有可能的是,随机内存会被覆盖,从而导致其他地方出现无关的错误。

答案 1 :(得分:1)

这条线错了。

struct heap *h=(struct heap*)malloc(sizeof(struct heap*));

需要:

struct heap *h=malloc(sizeof(struct heap));

答案 2 :(得分:0)

这些界限合起来没有意义:

array1=(double*)malloc(sizeof(double)*n);

for(i=1;i<=n;i++ ){

你分配一个包含n个元素的数组,但是然后尝试一直写到数组的末尾,并在结束后写1个元素!

相反,您的for循环应该如下所示:

for( i=0; i<n; i++ ){

<强>记住
在C中,数组是基于ZERO的,而不是基于1的 第一个元素是array1[0]。最后一个元素是array1[n-1] 元素array1[n]无效