#include<stdio.h>
char newbuf[1000];
char *newp=newbuf;
void free(char *p)
{
if(p>newbuf&&p<newbuf+1000)
p=newp;
}
为什么出错?
请问C语言free(p)释放p所指向的动态内存后p指向哪?是NULL还是随机还是什 ...
释放后指向随机地址。所以free后,如果没有新地址给指针变量,p就应该给空值NULL。否则就是“野指针”。
C语言中free函数的用法
free函数的用法释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配。free 不管指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete\/delete [] 要方便。如在分配指针时,用的是new或new[]。在释放内存时,并不能图方便而使用fre...
C语言动态内存释放这个free(p);到底是释放的是第一个单元的空间还是释放...
free()释放的是指针指向的内存,不单单是首地址单元,包括所有动态分配的 另外注意释放的是内存不是指针 指针是一个变量,只有程序结束时才被销毁 释放了内存空间后,原来指向这块空间的指针还存在,只不过现在指针指向的内容是未定义的,是垃圾
c语言带空头结点的单链表删除 free(p)后为什么还要p==null
这是c语言的问题。其实楼上说的很清楚。free只是释放了p所指向的堆地址,p还是指向的这个地址。这个操作是让操作系统知道这片堆地址已经从原来的被占用,变成了可使用。这时候你其实还是可以用p去操作这个地址。但是这操作是不安全的。因为操作系统默认这片堆地址可以随意使用。当其他程序刚好调用这个地址...
c语言 free
所以还能操作。看结构定义,p->next这个指针是存放在p所指向的空间里面。如果p=NULL; 那么可以访问到p->next吗 是不是p->next==NULL.答:不可以,指针必须指向一个结构,才能够引用结构的next指针。一般循环释放内存应该这样子。while(p!=NULL){ temp = p;p = p->next;free(temp);} ...
C语言中的free函数如何正确使用
free只能释放由堆动态申请的空间,但是第一个中p,q两个不同的指针变量指向同一片地址,free(q);q = NULL;后,q和p指向的空间被释放,且q被赋值为NULL,但是此时p变量的值并没有改变,即其值还是原来申请的空间的首地址。这里注意原来申请的空间已被释放,只是p还保留那篇空间的首地址值,所以...
关于C语言free函数的问题
一般delete是和new配对的,free和malloc配对的!!其释放的是p所指向的空间,即内存地址!!但是指针变量没有变成NULL,其还是指向原来开辟的空间,但是此空间被释放了,所以其就是一个“野指针”,指针所指向的内容是”垃圾“,因此释放空间的时候,建议也把指针变成空指针!!!以免误用!!
C语言中再次释放已经释放的空间会造成什么后果?
free再次释放已释放的空间,不会有任何释放效果,因为free释放地址,是对地址作标记,表示该地址未被使用,可以再次用于分配。并不是说内存就消失了。(注意:1,free后原内存中的数据,不变或被重置。2,free后不会自动将指针置NULL,需要手动置NULL,继续用指针访问已释放的地址是不安全的。)下面演示...
...用malloc分配一段空间给一个指针p后,free(p)与p=null;作用相同嘛...
一般是free之后,再p=null 作用是不相同的 free 是告诉系统,这块空间我不同了,系统你可以把它分配给其他程序。p=null 只是把指针指向空,而原来分配的内存并没有free,系统就以为你还在用,这样这块内存就没法释放,也就是内存泄露了
C语言:关于FREE()函数的用法
不可以的。malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用...