注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

孤独侠的博客

 
 
 

日志

 
 

学习链表  

2013-08-07 23:25:33|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

free()到底释放了什么

free()释放的是指针指向的内存!注意!释放的是内存,不是指针!指针并没有被释放,指针仍然指向原来的存储空间。指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容是垃圾,是未定义的,所以说是垃圾。因此,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TSIZE 45
struct film {
 char title[TSIZE];
 int rating;
 struct film * next;
 };
 
int main(void){
  struct film * head = NULL;
 struct film * prev, * current;
 char input[TSIZE];
   
    puts("Enter first movie title: ");
    while(gets(input) != NULL && input[0] != '\0')
    {
 current = (struct film *) malloc (sizeof (struct film));
 if (head==NULL){
   head=current; 
}
 else
     prev->next=current;
 current->next=NULL;
 strcpy(current->title,input);
 puts("Enter your rating <0-10>: ");
 scanf("%d",&current->rating);
 while(getchar()!='\n')
   continue;
 puts("Enter next movie title (empty line to stop): ");
 prev=current;
  
    } 
    if(head==NULL)
     printf("no data entered");
   
    else
        printf("Here is the movie list: \n");
    current=head;
    while(current!=NULL){
     printf("Movie: %s Rating: %d\n",current->title,current->rating);
     current=current->next;
    }

    current =head;
     while(current!=NULL){
  free(current);
  printf("%d\n",current->rating);
  current=current->next;
 }   
    printf("Bye!\n");
 return 0;   
}

  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017