c语言中 free()函数为什么不能释放 数组最后一个单元的空间

如 #include<stdio.h>
#include<stdio.h>
int main()
{
char a[5];
gets(a);
free(a+5);
printf("%s",a);
system("pause")
return 0;
}
输入“abcde” 输出的还是“abcde”,求解释

#include<malloc.h>
#include<stdio.h>
int main()
{
char a[5];
gets(a);
//你这个代码是我的电脑上运行是错误的
free(a+2);//a+5不属于a的,a的范围是a[0]到a[4],而且这个free是对于指针的,你对这种是没有用的,a+2是常量,a也是常量,是地址常量.不能用free的
printf("%s",a);
//system("pause");
getchar();
return 0;
}追问

哦?

追答

哪里面不懂就问,懂了就加分吧

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-22
因为是手机,所以没办法自己也编译试试。说说我的看法。
a+5是不是已经过了?就是说,a数组你总共只开了五个,然后a+5的话实际上已经到第六格了?
改成a+4,我回家试试,你也试试。如果不行我再查一下。希望有所裨益。追问

谢谢你啊,编译过了,a+4 也是一样的

第2个回答  2012-02-22
你数组为a[5],就是申请了0-4,注意你a[5]并没有申请,所以a+5本身就没有,释放了也无所谓。
第3个回答  2012-02-22
你定义的局部变量,用free()不管用,即使是你malloc()出来的空间free()的时候,free掉的空间的值当时还没有改变,还是可以显示刚才的值。

C语言,free函数这样用对吗?
是的,完全释放了。因为你最后释放的p,b,的指针,和申请calloc时的值是完全一样的。中间不论怎么变,但最后的地址是正确的,你申请了,两个数组,释放了两次。这个操作是可以的。

C语言中free函数的用法
free函数的用法释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配。free 不管指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete\/delete [] 要方便。如在分配指针时,用的是new或new[]。在释放内存时,并不能图方便而使用free...

C语言链表每个节点最后都得free掉吗?还是只用free掉头指针就可以了...
数组是用一个malloc来的,就用一个free让它走 链表的结点是用多个malloc来的,就要用多个free把它们全free掉

C语言函数问题: free可以只释放个别单元吗,比如我定义了一个动态...
不可以,这个需求要通过移动数组元素再加上realloc()函数实现

关于C语言中free函数的问题
要free的话首先那块空间得是malloc, calloc, realloc...开辟出来的内存空间, free多少取决于当时alloc出多少.char* a = (char*)malloc(x*y*sizeof(char));\/\/开辟了x*y个char的空间,(这里是二维的,如果多维就是要多少,开多少);\/\/相当于a[x][y];\/\/但是malloc出的空间是堆区的,而数组是在...

C语言里如何使用free()释放字符串内存
由于free和malloc配对使用,malloc的时候,大小已经告诉系统了。free的时候,系统会比对一下这个地址,是不是malloc申请的,如果不是,不给释放 如果是的话,系统就知道要释放多大内存,因为malloc的时候,系统有记录的。当然了,申请的地址,也记录了的,否则,就无法比对了。include <stdio.h> include <...

c语言中,在一维数组中怎么去删除一个最后一个元素,并且释放最后一个数...
没法释放,也没法绝对意义的删除,一个办法就是设置一个pos表示最后一个元素的下标,如果想删除这个元素,只需把pos--就好,当下一次写入的时候直接在pos处添加就是了,最后一个元素被覆盖

c语言字符数组如何释放消毁?
你提问中定义方式是在函数完成前释放不了的,你定义的字符数组,放在stack空间,不能用free()试图释放堆中的内容,因为那里是一段程序运行的保证。只有使用malloc()在栈空间开辟的动态内存才能被释放!如果你后面的代码想继续用这个数组名的话,这个数组还是可以重新赋值。你可以把你用到的数据独到这个变量中就行了!你定...

请问C语言free(p)释放p所指向的动态内存后p指向哪?是NULL还是随机还是什 ...
释放后指向随机地址。所以free后,如果没有新地址给指针变量,p就应该给空值NULL。否则就是“野指针”。

C语言里用数组存指针需要释放(free)吗?
free是对应malloc的,不是malloc的不用free。因为p是声明出来的int *p,所以不用free

相似回答