free(p)后指针问题
来源:互联网 发布:腾讯 大数据 排行 编辑:程序博客网 时间:2024/04/30 12:05
笔试很喜欢考这些
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *str =(char *)malloc(100);
strcpy(str, "hello");
free(str);
if(str != NULL)
{
strcpy(str, "world");
printf("%s/n", str);
}
return 0;
}
free(str)后指针仍然指向原来的堆地址,即你仍然可以继续使用,但很危险,因为操作系统已经认为这块内存可以使用,他会毫不考虑的将他分配给其他程序,于是你下次使用的时候可能就已经被别的程序改掉了,这种情况就叫“野指针”,所以最好free()了以后再置空
str = NULL;
即本程序已经放弃再使用他。
下面是摘自论坛里面的形象比喻,加深理解。
CRT的内存管理模块是一个管家。
你的程序(简称“你”)是一个客人。
管家有很对水桶,可以用来装水的。
malloc的意思就是“管家,我要XX个水桶”。
管家首先看一下有没有足够的水桶给你,如果没有,那么告诉你不行。如果够,那么登记这些水桶已经被使用了,然后告诉你“拿去用吧”。
free的意思就是说:“管家我用完了,还你!”。
至于你是不是先把水倒干净才给管家,那么是自己的事情了。--是不是清零。
管家也不会将你归还的水桶倒倒干清(他有那么多水桶,每个归还都倒干净岂不累死了)。反正其他用的时候自己会处理的啦。
free之后将指针清零只是提醒自己,这些水桶已经不是我的了,不要再完里面放水了,^_^
如果free了之后还用那个指针的话,就有可能管家已经将这些水桶给了其他人装饮料的了,你却往里面撒了泡尿。好的管家可能会对你的行为表示强烈的不满, 杀了你(非法操作)--这是最好的结果,你知道自己错了(有错就改嘛)。一些不好的管家可能忙不过来,有时候抓到你作坏事就惩罚你,有时候却不知道去那里 了--这是你的恶梦,不知道什么时候、怎么回事情自己就死了。不管怎么样,这种情况下很有可能有人要喝尿--不知道是你的老板还是你的客户了.^_^。
所以啊,好市民当然是还了给管家的东西就不要再占着啦,.^_^。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *str =(char *)malloc(100);
strcpy(str, "hello");
free(str);
if(str != NULL)
{
strcpy(str, "world");
printf("%s/n", str);
}
return 0;
}
free(str)后指针仍然指向原来的堆地址,即你仍然可以继续使用,但很危险,因为操作系统已经认为这块内存可以使用,他会毫不考虑的将他分配给其他程序,于是你下次使用的时候可能就已经被别的程序改掉了,这种情况就叫“野指针”,所以最好free()了以后再置空
str = NULL;
即本程序已经放弃再使用他。
下面是摘自论坛里面的形象比喻,加深理解。
CRT的内存管理模块是一个管家。
你的程序(简称“你”)是一个客人。
管家有很对水桶,可以用来装水的。
malloc的意思就是“管家,我要XX个水桶”。
管家首先看一下有没有足够的水桶给你,如果没有,那么告诉你不行。如果够,那么登记这些水桶已经被使用了,然后告诉你“拿去用吧”。
free的意思就是说:“管家我用完了,还你!”。
至于你是不是先把水倒干净才给管家,那么是自己的事情了。--是不是清零。
管家也不会将你归还的水桶倒倒干清(他有那么多水桶,每个归还都倒干净岂不累死了)。反正其他用的时候自己会处理的啦。
free之后将指针清零只是提醒自己,这些水桶已经不是我的了,不要再完里面放水了,^_^
如果free了之后还用那个指针的话,就有可能管家已经将这些水桶给了其他人装饮料的了,你却往里面撒了泡尿。好的管家可能会对你的行为表示强烈的不满, 杀了你(非法操作)--这是最好的结果,你知道自己错了(有错就改嘛)。一些不好的管家可能忙不过来,有时候抓到你作坏事就惩罚你,有时候却不知道去那里 了--这是你的恶梦,不知道什么时候、怎么回事情自己就死了。不管怎么样,这种情况下很有可能有人要喝尿--不知道是你的老板还是你的客户了.^_^。
所以啊,好市民当然是还了给管家的东西就不要再占着啦,.^_^。
0 0
- free(p)后指针问题
- free(p)后指针问题
- free(p)后指针问题
- free(p)后指针问题
- free(p)后指针问题
- c/c++中delete/free 指针后,设置p=NULL的好处
- c/c++中delete/free 指针后,设置p=NULL的好处
- c/c++中delete/free 指针后,设置p=NULL的好处
- free后指针为NULL?
- free()后程序崩溃问题
- free指针后并不等于该指针就指向NULL
- free指针时的_CrtIsValidHeapPointer问题
- 指针中的 &p, p, *p
- 指针 *p++和*++p
- 指针++*p++
- 指针P
- 【C语言】delete free后设p=NULL的好处
- P - k-Multiple Free Set
- Android 存储数据SharedPreferences详解
- LVS-【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡
- LVS-Web基础构架:负载均衡和LVS
- LVS-四层和七层负载均衡的区别
- 对Java学习的想法
- free(p)后指针问题
- Kidding_wjj
- 8086汇编指令速查手册
- Binary Search Tree analog
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第三章 类,对象和方法
- mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- rails 4 中 因为secret key 引起在production环境下无法访问 应用的解决办法
- 欢迎使用CSDN-markdown编辑器
- 贪心算法的实际应用