| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 776 人关注过本帖
标题:大家来帮我看看这个程序错在哪里?
只看楼主 加入收藏
longziyong
Rank: 2
来 自:四川省威远县
等 级:禁止访问
帖 子:77
专家分:23
注 册:2007-8-22
收藏
 问题点数:0 回复次数:7 
大家来帮我看看这个程序错在哪里?
#define BLKSIZ 80
#define STKSIZ 1000

typedef union{
   char *link;
   char data[BLKSIZ];
}BLOCK;

static BLOCK *btm_of_heap;
static BLOCK *top_of_heap;
static BLOCK *heap;

void Init_Heap(){
   BLOCK *ptr;
   int blk;
   heap=(BLOCK *)malloc(BLKSIZ);
   btm_of_heap=heap;
   ptr=heap;
   for(blk=0; blk<49; blk++){
      ptr->link=(BLOCK *)malloc(BLKSIZ);
      ptr=ptr->link;
   }
   ptr->link=NULL;
   top_of_heap=ptr;
}

void My_Free(BLOCK *ptr){
   if(ptr>=btm_of_heap){
      if(ptr<top_of_heap){ /*Block is from my heap*/
         ptr->link=heap;
         heap=ptr;
         return;
      } else if(free(ptr)){ /*Block is from C-Ware's heap*/
         return;
      }
   }
   puts("\nAttempt to free unallocated block!\n\7");
   exit(1);
}

BLOCK *Allocate(int bytes){
   BLOCK *ptr;
   if(bytes<=BLKSIZ){ /* 要求的内存块大小小于链表维护的内存块大小 */
      if(heap!=0){ /* 有空闲块 */
         ptr=heap;
         heap=heap->link;
         return ptr;
      }
   }
   if(ptr=(BLOCK *)malloc(bytes)){ /* 要求的内存块大小大于链表维护的内存块大小或者没有空闲块 */
      return ptr;
   }
   puts("Insufficient memory:malloc()\n\7");
   exit(1);
}

void main()
{
   BLOCK *main_ptr
   Init_Heap();
   main_ptr=Allocate(80);
   My_Free(main_ptr);
}
2008-12-09 17:45
longziyong
Rank: 2
来 自:四川省威远县
等 级:禁止访问
帖 子:77
专家分:23
注 册:2007-8-22
收藏
得分:0 
补充:错误提示截图:
图片附件: 游客没有浏览图片的权限,请 登录注册

LZY'Blog http://www.
2008-12-09 17:48
longziyong
Rank: 2
来 自:四川省威远县
等 级:禁止访问
帖 子:77
专家分:23
注 册:2007-8-22
收藏
得分:0 
请高手帮忙看看吧,小弟实在改正不了。

LZY'Blog http://www.
2008-12-09 18:32
yu8697593
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-21
收藏
得分:0 
ptr>=btm_of_heap?????

他们的指针能够比较大小吗?

他们的地址是系统随即分配的 好像不能比较大小的,个人意见哈
2008-12-09 18:44
cn9069
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-12-9
收藏
得分:0 
大都是类型转换引起的警告和错误
大都是类型转换引起的警告和错误
假设 #define BLKSIZ 80 为第一行
后面依次改为:
行20:ptr->link=(char *)malloc(BLKSIZ);
行21:ptr=(BLOCK *)ptr->link;
行30:ptr->link=(char*)heap;
行33: } else { /*Block is from C-Ware's heap*/
行34:   free(ptr);return;
行46:heap=(BLOCK *)heap->link;
行59:BLOCK *main_ptr;  (少一个分号)
2008-12-09 18:52
longziyong
Rank: 2
来 自:四川省威远县
等 级:禁止访问
帖 子:77
专家分:23
注 册:2007-8-22
收藏
得分:0 
谢谢楼上大哥的帮忙,程序中还有一个警告,再请帮忙看看:
图片附件: 游客没有浏览图片的权限,请 登录注册

LZY'Blog http://www.
2008-12-10 15:41
A东东
Rank: 1
等 级:新手上路
帖 子:16
专家分:1
注 册:2008-12-10
收藏
得分:0 
老哥你还在线苦等呢啊,我也是个新手,也看不太懂。
2008-12-10 16:55
longziyong
Rank: 2
来 自:四川省威远县
等 级:禁止访问
帖 子:77
专家分:23
注 册:2007-8-22
收藏
得分:0 
没办法,自己搞不清楚这个问题究竟是出在哪里啊,虽然经过5楼的大哥改正后,程序能够通过编译了,但还存在这么一个警告,不知为何?

LZY'Blog http://www.
2008-12-10 17:38
快速回复:大家来帮我看看这个程序错在哪里?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017720 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved