| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 419 人关注过本帖
标题:动态分配内存空间不够时,怎样解决,请赐教!
只看楼主 加入收藏
m_taylor
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-10-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
动态分配内存空间不够时,怎样解决,请赐教!
我检测了一下用malloc()可以分配60K字节的内存,可我需要分配90K左右字节的链表节点空间,怎样解决,我尝试着用巨模式编译,发现可以一次性分配200K左右,可是输出结果却不对。请高手指点!
源代码如下:用TC2.0编译 目标是想将记事本中的3D开奖数据一次性全做成一下循环链表。
#include "stdio.h"
#define HAO_MAX 4

struct datanode    /*定义数据结点*/
{
  char num[8];
  int ji;
  int qiu;
  char shiji[4];
  char jiang[4];
  struct datanode *next;
};

typedef struct datanode datanode;
typedef datanode *link;             /*定义指针类型*/

void displace_1(char *array)      /*将类似67转成067的小函数*/
{
  array[HAO_MAX-1]='\0';
  array[HAO_MAX-2]=array[1];
  array[HAO_MAX-3]=array[0];
  array[0]='0';
}

void displace_2(char *array)   /*将类似6转成006的小函数*/
{
  array[3]='\0';
  array[2]=array[0];
  array[0]='0';
  array[1]='0';
}

void zhengli(char *array)   /*判断该开奖号是一位,还是两位,再统一转成三位的函数*/
{
  if(strlen(array)==2)
  {
    displace_1(array);
    return;
  }
  if(strlen(array)==1)
  {
    displace_2(array);
    return;
  }
}

link ins_create_1()                /*用插入的方法创建循环链表,将结点插在头结点之后,头结点指向最后一个结点,结点内容从文件中读取*/
{
  FILE *fp;
  link newnode,head=NULL;

  if((fp=fopen("001.txt","r"))==NULL)
  {
    printf("open error!");
    getch();
    return 0;
  }

  head=(link)malloc(sizeof(datanode));
  if(!head)
  {
    printf("memory01 alloction failure!\n");
    return 0;
  }

  fscanf(fp,"%s%d%d%s%s",head->num,&head->ji,&head->qiu,head->shiji,head->jiang);
  zhengli(head->shiji);
  zhengli(head->jiang);
  head->next=head;

  while(!feof(fp))
  {
    newnode=(link)malloc(sizeof(datanode));
    if(!newnode)
    {
      printf("memory01 alloction failure!\n");
      return 0;
    }

    fscanf(fp,"%s%d%d%s%s",newnode->num,&newnode->ji,&newnode->qiu,newnode->
    shiji,newnode->jiang);

    zhengli(newnode->shiji);
    zhengli(newnode->jiang);
    newnode->next=head->next;
    head->next=newnode;
    head=newnode;
  }
  fclose(fp);
  return head;

}

link ins_create_2()  /*同上一个函数一样,有点多余了*/
{
  FILE *fp;
  link newnode,head=NULL;

  if((fp=fopen("006.txt","r"))==NULL)
  {
    printf("open error!");
    getch();
    return 0;
  }

  head=(link)malloc(sizeof(datanode));
  if(!head)
  {
    printf("02memory alloction failure!\n");
    return 0;
  }

  fscanf(fp,"%s%d%d%s%s",head->num,&head->ji,&head->qiu,head->shiji,head->jiang);
  zhengli(head->shiji);
  zhengli(head->jiang);
  head->next=head;

  while(!feof(fp))
  {
    newnode=(link)malloc(sizeof(datanode));
    if(!newnode)
    {
      printf("memory02 alloction failure!\n");
      getch();
      exit(0);
    }

    fscanf(fp,"%s%d%d%s%s",newnode->num,&newnode->ji,&newnode->qiu,newnode->
    shiji,newnode->jiang);

    zhengli(newnode->shiji);
    zhengli(newnode->jiang);
    newnode->next=head->next;
    head->next=newnode;
    head=newnode;
  }
  fclose(fp);
  return head;

}
void pri(link head)   /*将链表内容顺序输出*/
{
  link ptr,tem;
  head=head->next;
  ptr=head;

  do
  {
    printf("%s %d %d  %s %s \n",ptr->num,ptr->ji,ptr->qiu,ptr->shiji,ptr->jiang);
    tem=ptr;
    ptr=ptr->next;
    free(tem);
  }
  while(ptr!=head);
}
void main()   /*主函数*/
{
  link head,head1;
  clrscr();

  head=ins_create_1();
  pri(head);
  getch();
  head1=ins_create_2();
  pri(head1);
  getch();
}

如果主函数改成
void main()
{
  link head
  clrscr();

  head=ins_create_1();
  pri(head);
  getch();
}
将ins_create_1()函数里的打开文件变成007.txt(约80K)则出错,无法分配足够的空间。
如果用巨模式编译,空间足够,可输出结果出错。附三个文件如下:
002.zip (9.93 KB)
006.zip (9.93 KB)
007.zip (21.67 KB)


搜索更多相关主题的帖子: 内存 动态 空间 
2010-12-06 10:58
fightingsss
Rank: 6Rank: 6
等 级:侠之大者
帖 子:97
专家分:471
注 册:2010-11-12
收藏
得分:20 
不知道。。。
2010-12-06 12:29
快速回复:动态分配内存空间不够时,怎样解决,请赐教!
数据加载中...
 
   



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

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