`
dawning126
  • 浏览: 45068 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

free(p)和p=NULL的区别

    博客分类:
  • C
  • C++
阅读更多


不相同!

free(p)指的是收回分配给它的空间,至于收回后p还指向之前的地址,不过里面的内容已经被清空了或者是乱码(这点可以编程输出一下p指向空间的内容,我在不同的机子上试的结果的不同,不过大多数是清空了的。

而赋值为NULL,就是让其指向NULL这个地址。但是分配给p的那块内存不会收回去,这样就会造成内存的浪费!

一般比较安全的写法是:free(p);  p=NULL;即在free之后,再给p赋值为NULL。

原因:free指的是收回分配给p的空间,在内存中将通过malloc给p分配空间后,该块空间就处于已分配状态,当你free后,该块内存就处于空闲即可分配状态。

详细点说就是在内存中会有一个空闲区域和已分配的区域,malloc后将从空闲区为其分配一块内存空间,并将该块内存从空闲区中删除,放置到已分配的区域,当你free后就又将它从已分配的区域划分到空闲区域。而此时你定义的指针p还是存在的,变成了野指针。这样就会造成内存泄露,这样就会存在安全问题。所以要给p赋一个NULL值!
分享到:
评论

相关推荐

    进程同步问题模拟程序

    PCB* p=NULL; PCB** p1=NULL; printf("\n 请输入希望产生的进程个数?"); scanf("%d",&num); getchar(); // if(num>=100){ // printf("您怎么要产生这么多进程!Demands Denied!"); // return false; // } ...

    二叉树的遍历与应用二叉链表

    //free(p); } return(head); } /* function FirstOrderAccess0()功能:实现二叉树的前序遍历 二叉树前序遍历的思想: 从根节点开始,沿左子树一直走到没有左孩子的节点为止, 依次访问所经过的节点,同时所经[节点...

    二叉排序树

    p->lchild=NULL; p->rchild=NULL; if(T==NULL) T=p; else { q=T; if(item<q->data) InsertBiTree(q->lchild,item); else InsertBiTree(q->rchild,item); } return true; } bool CreateBiTree...

    飞机订票系统

    = NULL && p->next != NULL) { q = p; p = p->next; free(q); } } unsigned int GetPsgCount(PNODE psglist) { PNODE p; unsigned int s = 0; for (p = psglist->next; p != NULL; p = p->next) s++; ...

    动态单链表

    LinkList p=NULL,s=NULL; int j=1,post; s=(LinkList)malloc(sizeof(LNode)); if(!s) printf("储存错误!!\n"); s->next=NULL; printf("请输入要查找的元素:"); scanf("%d",&s->data ); p=L; while(p&&...

    线性表的各种操作

    if(p==NULL)return(0); else return(i); } int ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素 { int j=0; LinkList *p=L,*s; while(j<i-1&&p!=NULL) { j++;p=p->next; } if(p==NULL)return 0...

    [详细完整版]数据结构答案.doc

    =NULL) { p=p->next; i++; } return i; }// Length2 2.19 Status delete(struct node head,int max,int min) { if(head!=NULL) { q=head; p=head->next; while(p&&(p->data<min""p->data==min)) { q=p; p=p->next; }...

    先来先服务算法C++源程序代码

    #define pfree 0 /*process end*/ #define running 1 /*process running status*/ #define aready 2 /*process aready status */ #define blocking 3 /*process aready blocking status*/ typedef struct node ...

    C++多项式的和为你们提供的也为自己提供

    =NULL) //将多项式A中剩余的结点加入到和多项式中 pre->next=p; else pre->next=q; } void multipoly(node *ha,node *hb) { node *p,*q,*n,*m; p=ha->next; n=(node*)malloc(sizeof(node)); n->next=NULL; while...

    struct student

    =NULL&&p->next->num!=num) p=p->next; q=p->next; p->next=p->next->next; free(q); } void print(struct student *head) { struct student *p; int i; p=head->next; if(p==NULL) { printf("\nthere is no ...

    数据结构的二叉链表对树的操作

    //free(p); } return(head); } /* function FirstOrderAccess0()功能:实现二叉树的前序遍历 二叉树前序遍历的思想: 从根节点开始,沿左子树一直走到没有左孩子的节点为止, 依次访问所经过的节点,同时所经[节点...

    操作系统实验,CPP程序

    free(p); } running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ { (p->rtime)++; if(p->rtime==p->ntime) destroy(); /* 调用destroy函数*/ else { (p->super)--; p->state='w'; sort(); /*调用...

    利用哈希查找链地址法查找元素

    free(q); } print_hash(node **A,int n) { int i; node *p; for(i=0;i;i++) { if(A[i]->next!=NULL) { p=A[i]->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } } } printf("\n"); } ...

    数据结构所有代码C++实现

    精心整理 一:线性表 1.单链表应用 ... free(r); } else q=q->next; } p=p->next; } } int main(void) { creat_list(); out_put_list(); delete_list(); out_put_list(); return 0; }

    信道容量迭代.docx

    ​float *p_i=NULL; ​float ** p_ij=NULL; ​float ** phi_ji=NULL; ​float c,c_pre,validate; ​float *sum=NULL; ​float p_j; ​printf("请输入信源的符号数:"); ​fscanf (stdin,"%d",&r); ​printf("\n"); ​...

    人议会制贝塞尔曲线

    void DrawBezier(point *p) { point *q=(point*)malloc(sizeof(point)); q->x=p->x; q->y=p->y; point *b=q; point *g=q; point *c=(point*)malloc(sizeof(point)); point *s=p->next; int n=f.n-1; ...

    数据结构与算法-linklist逆转

    p->next=NULL; while(q!=NULL) { q->next=p; (*L)->next=q; p=q; q=r; if(r!=NULL) r=q->next; else break; } } void main() { LinkList list1; InitList(&list1); create_tail(&list1, ...

    进程的调度

    free(p); } void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ { (p->rtime)++; if(p->rtime==p->ntime) destroy(); /* 调用destroy函数*/ else { (p->super)--; p->state='w'; sort(); /...

    清华大学严慰敏版数据结构实验代码

    p->next=NULL;q->next=p; q=p; i++;} p->next=(*L)->next; } void PrintList(LinkList L) { int i=0;LinkList p;p=L->next; while(i<L->data) { printf("%5d",p->data); p=p->next;i++; } printf("\n"); } ...

    二叉树 源代码 txt格式

    node p=NULL,s=NULL; if(!searchBST(*t,key,NULL,&p)) /*查找不成功*/ { s=(node)malloc(sizeof(BSTnode)); s->data=key; s->lchild=s->rchild=NULL; if(!p) *t=s; /*被插结点*s为新的根结点*/ else if...

Global site tag (gtag.js) - Google Analytics