当前位置: 代码迷 >> C语言 >> 内存不能申请问题
  详细解决方案

内存不能申请问题

热度:302   发布时间:2007-10-11 22:54:09.0
内存不能申请问题

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct listnode *position;

struct listnode
{
char a[10] ;
int group;
position next;
} ;

typedef position list;
struct hashtbl
{
int tablesize;
list *thelists;
};
typedef struct hashtbl *hashtable;
hashtable InitializeTable(int tablesize)
{
hashtable H;
int i;
H=malloc(sizeof(struct hashtbl));
if(H==NULL)
{
printf("out of space1!!") ;

}


H->tablesize=tablesize;
H->thelists=malloc(sizeof(list)*H->tablesize);
if(H->thelists==NULL)
{ printf("out of space2!!");

}

for(i=0;i<H->tablesize;i++)
{
H->thelists[i]=malloc(sizeof(struct listnode));
if(H->thelists[i]==NULL)
{
printf("out of space3!!");

}
else
H->thelists[i]->next=NULL;
}


return H;
}
void insert(char *s,hashtable H,int g)
{
position p, newcell;
list l;
??? newcell=malloc(sizeof(struct listnode));
if(newcell==NULL)
{ printf("out of space4!!");
}?????

else
{
l=H->thelists[s[0]-'A'];
p=l->next;
while(p!=NULL)
p=p->next;
p->next=newcell;
newcell->next=NULL;
strcpy(newcell->a,s);
newcell->group=g;
}
}
int find(char *s,hashtable H)
{
position p;
list l;
l=H->thelists[s[0]-'A'];
p=l->next;
while(p!=NULL&&strcmp(p->a,s)!=0)
p=p->next;
return p->group;
}

void ENQUEUE(char *s,int group,list l)
{ position p,temp,newcell;
p=l->next;
temp=l;
while(p!=NULL&&p->group>group)
{
temp=p;
p=p->next;
}
newcell=malloc(sizeof(struct listnode));
if(newcell==NULL)printf("out of space!!");
else
{
strcmp(newcell->a,s);
newcell->group=group;
temp->next=newcell;
newcell->next=p;
}
}

void DEQUEUE(list l)
{ position temp;
temp=l;
l=l->next;

free(temp);
}


main()
{
hashtable h;
list queue;
FILE *input,*output;
char s[10];
int group;

int k,a[1000];
int i,j;
if((input=fopen("input.txt","r"))==NULL)
{ printf("can't open the file1\n");
exit(0);
}
if((output=fopen("output.txt","w"))==NULL)
{ printf("can't open the file2\n");
exit(0);
}
while(1)
{ queue=malloc(sizeof(struct listnode));
queue->next=NULL;
fscanf(input,"%d",&k);
if(k==0)break;
h=InitializeTable(26);

for(i=0;i<k;i++)
{
fscanf(input,"%d",&a[i]);

for(j=0;j<a[i];j++)
{
fscanf(input,"%s",s);
/*insert(s,h,i); */

fprintf(output,"%s\n",s);
}
fprintf(output,"\n");
}
while(fscanf(input,"%s",s))
{
if(strcmp("stop",s)==0)break;
else if(strcmp("ENQUEUE",s)==0)
{
fscanf(input,"%s",s);
group=find(s,h);
ENQUEUE(s,group,queue);
}
else if(strcmp("DEQUEUE",s)==0)
{ fprintf(output,"%s\n",s);
DEQUEUE(queue);
}

}

}
fclose(input);
fclose(output);
}
打问号的地方,不能申请内存,部知道什么原因,请个位帮帮忙。
我用的是c-free编译的

搜索更多相关的解决方案: 内存  struct  int  position  typedef  

----------------解决方案--------------------------------------------------------
newcell=(position)malloc(sizeof(struct listnode));试试看
----------------解决方案--------------------------------------------------------
你的position不是指针,已经有了内存空间,所以不能分配。定义时把position定义成*position就OK了
----------------解决方案--------------------------------------------------------
  相关解决方案