动态分配内存空间不够时,怎样解决,请赐教!
我检测了一下用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)