- 论坛徽章:
- 0
|
本帖最后由 bjkillall 于 2010-09-28 16:45 编辑
上面的截图是小弟的程序在运行结束时的提示,查找了好久结果也没有找到,知道本版有很多大牛,所以发上来跟大家咨询一下;
下面是我的内存分配和回收部分的代码;
【分配一】
222 char* seqing[685];
223 int a;
224 for(a=0;a<685;a++)
225 {
226 seqing[a]=(char*)malloc(sizeof(char)*1024);
227 }
【分配二】
252 char* item[5];
253 int m;
254 for(m=0;m<5;m++)
255 {
256 item[m]=(char*)malloc(sizeof(char)*204 ;
257 }
【回收】
317 for(n=0;n<685;n++)
318 {
319 free(seqing[n]);
320 }
321 for(n=0;n<5;n++)
322 {
323 free(item[n]);
324 }
大家看看有没有什么问题,谢谢了~
应大家要求我把main函数的代码发给大家;同时大家也可以给一下优化建议;- int main(int argc,char* argv[])
- {
- if (argc!=3)
- {
- printf("[USAGE:] %s matchFile illegalFile.\n",argv[0]);
- return 0;
- }
- FILE* matchFile=fopen(argv[1],"r");
- assert(matchFile!=NULL);
- FILE* illegalFile=fopen(argv[2],"r");
- assert(illegalFile!=NULL);
- FILE* HEFA=fopen("./hefa.txt","a+");
- assert(HEFA!=NULL);
- FILE* FEIFA=fopen("./feifa.txt","a+");
- assert(FEIFA!=NULL);
- FILE* FEIFA_LINE=fopen("./feifa_line.txt","a+");
- assert(HEFA!=NULL);
- FILE* FEIFA_DETAIL=fopen("./feifa_detail.txt","a+");
- assert(HEFA!=NULL);
- char* seqing[685];
- int a;
- for(a=0;a<685;a++)
- {
- seqing[a]=(char*)malloc(sizeof(char)*1024);
- }
- //memset(seqing,0,sizeof(seqing));
- char buffer[1024];
- memset(buffer,0,sizeof(buffer));
- int i=0;
- while((fgets(buffer,1023,illegalFile)!=NULL)&&(i<685))
- {
- char* ptest=strtrim_ln(buffer); //这一行的目的是将fgets读进来的'\n'转化成'\0'
- strcpy(seqing[i],ptest);
- i++;
- }
- int line[685];
- for(i=0;i<685;i++)
- {
- line[i]=0;
- }
- int detail[685];
- for(i=0;i<685;i++)
- {
- detail[i]=0;
- }
- char* item[5];
- int m;
- for(m=0;m<5;m++)
- {
- item[m]=(char*)malloc(sizeof(char)*2048);
- }
- char sbuffer[2048];
- while(fgets(sbuffer,2047,matchFile)!=NULL) //sbuffer的格式如下 : 字符串'\t'数字 ,'\t'表示两者之间的分割符;
- {
- char middle[2047];
- memset(middle,0,sizeof(middle));
- strcpy(middle,sbuffer);
- char* pmiddle=strtrim_ln(middle);
- SplitStr(pmiddle,item,5,'\t'); //该行的目的是以'\t'为标记切割pmiddle,分别存在item[0]到item[4]中,最大分割成5个部分
- int i;
- int flag=0;
- for(i=0;i<685;i++)
- {
- if(compare(item[0],seqing[i])==0) //该行的目的就是匹配item[0]和seqing[i],成功返回0,并且将相关信息写入文件;
- {
- flag=1;
- line[i]=line[i]+1;
- int mid=atoi(item[1]);
- detail[i]=detail[i]+mid;
- fwrite(item[0],strlen(item[0]),1,FEIFA);
- fwrite("\t",1,1,FEIFA);
- fwrite(item[1],strlen(item[1]),1,FEIFA);
- fwrite("\n",1,1,FEIFA);
- break;
- }
- }
- if(0 == flag)
- {
- fwrite(item[0],strlen(item[0]),1,HEFA);
- fwrite("\t",1,1,HEFA);
- fwrite(item[1],strlen(item[1]),1,HEFA);
- fwrite("\n",1,1,HEFA);
- }
- }
- int n=0;
- for(n=0;n<685;n++)
- {
- fwrite(seqing[n],strlen(seqing[n]),1,FEIFA_LINE);
- fwrite("\t",1,1,FEIFA_LINE);
- char str1[100];
- memset(str1,0,sizeof(str1));
- sprintf(str1,"%d",line[n]);
- fwrite(str1,strlen(str1),1,FEIFA_LINE);
- fwrite("\n",1,1,FEIFA_LINE);
- fwrite(seqing[n],strlen(seqing[n]),1,FEIFA_DETAIL);
- fwrite("\t",1,1,FEIFA_DETAIL);
- char str2[100];
- memset(str2,0,sizeof(str2));
- sprintf(str2,"%d",detail[n]);
- fwrite(str2,strlen(str2),1,FEIFA_DETAIL);
- fwrite("\n",1,1,FEIFA_DETAIL);
- }
- for(n=0;n<685;n++)
- {
- free(seqing[n]);
- }
- for(n=0;n<5;n++)
- {
- free(item[n]);
- }
- fclose(matchFile);
- fclose(illegalFile);
- fclose(HEFA);
- fclose(FEIFA);
- fclose(FEIFA_LINE);
- fclose(FEIFA_DETAIL);
- return 0;
- }
复制代码 好了,有一些自己写的函数我已经在后面标记了,如果有什么地方有问题大家可以提出来,帮我分析下这个问题吧,我搞不定了~ |
|