关于vc中内存问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 17:10:54
写vc程序时导入文件的时候,将文件放在链表中,当文件内容不多是,程序可以运行,当文件内容较多时(最多1k),程序运行一半就终止了。我用了内存管理函数
void INIT_HEAP()
{
int i;
union block * tmp;
heap=(union block *)malloc(sizeof(union block));
tmp=btm_heap=heap;
puts("Ok");
for(i=0;i<50;i++)
{
tmp->link=(union block *)malloc(sizeof(union block));
tmp=tmp->link;
}
top_heap=tmp;
top_heap->link=NULL;
printf("a heap has been initialized\n");
}
这是建立内存堆函数
void FREE(struct item * fp)
{
union block * p=( union block * )(fp);
if(p>=btm_heap&&p<=top_heap)
{
p->link=heap;
heap=p;
printf("a block from heap has been free\n");
}
else
{
free(p);
printf("a block from C-ware's heap has been free\n");
}
}
这是内存释放函数
struct item * ALLOCATE()//内存分配函数
{
struct it

在分配内存的时候,你在
for(i=0;i<50;i++)
{
tmp->link=(union block *)malloc(sizeof(union block));
tmp=tmp->link;
}
时就固定了所分配的内存的大小,当文件比较大的时候,所分配的内存就不足以装下所有的文件,故会出现你所提出的现象。

应该使用动态分配内存。