| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1938 人关注过本帖
标题:各位lz帮我看下为什么free()函数放在do while()循环用不了
取消只看楼主 加入收藏
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:4 
各位lz帮我看下为什么free()函数放在do while()循环用不了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct word word;
struct word
{
  char* pword;
  unsigned int count;
  word* pnext;
};
 
int main()
 {
word* pfirst=NULL;
 word* pcurrent=NULL;
 word* previous=NULL;
#define BUF_LEN 101
#define START 100
#define WORD 20
      word* ptemp=NULL;
   char buf[BUF_LEN];
   char delimites[]=" \n\".,;!?)(";
   size_t str_size=START;
       size_t word_max=20;
  unsigned    int word_count=0;
  unsigned int i=0;
    size_t word_length=0;
  char ch='y';
    int a=0;
    int flag=0;
    char* pstr=NULL;
    char* pbuf=NULL;

  while(ch=='y')
  {
    pbuf=(char*)calloc(str_size,sizeof(char));
   
   if(!pbuf)
   {
    printf("内存分配出现错误");
    return 1;
   }
   *pbuf='\0';
  
    fflush(stdin);
   printf("请每行输入最多%d字符,\n""结束输入通过按一个空行",BUF_LEN-1);

    while(a==0)
    {
     if(! fgets(buf,sizeof(buf),stdin))
     {
         printf("请错误:");
         return 9;
     }
      if(buf[0]=='\n')
       break;
      
     if(! strcat(pbuf,buf))
      printf("连接错误:");
     }
   
    pstr=strtok(pbuf,delimites);
    printf("正确");
    if(!pstr)
     {
      printf("没找到");
      return 2;
     }
     while(pstr)
      {
         
           
            pcurrent=pfirst;
                 
      
            while(pcurrent)
            {
                if(strcmp(pcurrent->pword,pstr)==0)
                {
                 flag=1;
                 ++pcurrent->count;
                 break;
                }
            pcurrent=pcurrent->pnext;
            flag=0;
            }
      
        
        if(flag==0)
        {
            
         pcurrent=(word*)calloc(1,sizeof(word));
   
          if(! pcurrent)
          {
           printf("分配内存错误");
           return 1;
          }
          word_length=10;
          if(!pfirst)
           pfirst=previous=pcurrent;
          else
          {
            previous->pnext=pcurrent;
            previous=pcurrent;
          }
      
          pcurrent->pword=calloc(word_length,sizeof(char));
          strcpy(pcurrent->pword,pstr);
          pcurrent->count=1;
          pcurrent->pnext=NULL;
          ++word_count;
      
        }
     
       pstr=strtok(NULL,delimites);
     }
    pcurrent=pfirst;
    i=0;
    while(pcurrent)
    {
      printf("%s %d",pcurrent->pword,pcurrent->count);
      pcurrent=pcurrent->pnext;
      i++;
      if(i%4==0)
        printf("\n");
    }
      
        free(pbuf);
        pbuf=NULL;
     



    pcurrent=pfirst;
    while(pcurrent)
    {
     
      free(pcurrent->pword);
      pcurrent->pword=NULL;
      ptemp=pcurrent;
       pcurrent=pcurrent->pnext;

      free(ptemp);
      ptemp=NULL;
      
    }

    printf("还想在来一次吗(y继续n退出)");
    scanf("%c",&ch);
   }
      
 
 
  return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: previous include count 
2017-02-26 23:53
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
收藏
得分:0 
回复 2楼 九转星河
好的我晚上回去在改改,第一次是能通过的,第二次运行就出问题了
2017-02-27 09:27
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
收藏
得分:0 
回复 2楼 九转星河
好的我晚上回去在改改,第一次是能通过的,第二次运行就出问题了
2017-02-27 09:44
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
收藏
得分:0 
回复 7楼 九转星河
按照你说的是试了下,已经可以了,有个地方我想不明白,在第一次while(ch=‘y’)循环的时候我不是已经free(pbuf);且设置成pbuf=null;也free(ptemp)ptemp=null;因为我第一次循环已经把这个两个指针不是设置成null了吗,为什么在第二次循环开始的时候还要把他们设置成char* pbuf=null;word* ptemp=pbuf=null;
2017-02-27 21:23
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
收藏
得分:0 
回复 10楼 九转星河
多谢指教
2017-02-27 22:42
快速回复:各位lz帮我看下为什么free()函数放在do while()循环用不了
数据加载中...
 
   



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

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