free后指针为NULL?
来源:互联网 发布:java课程设计选题 编辑:程序博客网 时间:2024/04/29 00:55
别看 free 和delete 的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。
strcpy(p, “hello”);
free(p); // p 所指的内存被释放,但是p 所指的地址仍然不变
…
if(p != NULL) // 没有起到防错作用
{
strcpy(p, “world”); // 出错
}
void Func(void)
{
char *p = (char *) malloc(100); // 动态内存会自动释放吗?
}
如何杜绝野指针?
“野指针”的成因主要有两种:
char *p = NULL;
char *str = (char *) malloc(100);
(2)指针p 被free 或者delete 之后,没有置为NULL,让人误以为p 是个合法的指针。如上述第一个程序
(3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下:
{
public:
void Func(void){ cout << “Func of class A” << endl; }
};
void Test(void)
{
A *p;
{
A a;
p = &a; // 注意 a 的生命期
}
p->Func(); // p 是“野指针”
}
函数 Test 在执行语句p->Func()时,对象a 已经消失,而p 是指向a 的,所以p 就成了“野指针”。但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。
- free后指针为NULL?
- free指针后并不等于该指针就指向NULL
- 指针delete后要设置为NULL
- delete指针后应该将指针赋值为NULL
- c/c++中delete/free 指针后,设置p=NULL的好处
- c/c++中delete/free 指针后,设置p=NULL的好处
- c/c++中delete/free 指针后,设置p=NULL的好处
- C++在delete指针后要赋值为NULL
- VC++ delete指针后要赋值为NULL的原因
- C++在delete指针后要赋值为NULL
- free(p)后指针问题
- free(p)后指针问题
- free(p)后指针问题
- free(p)后指针问题
- free(p)后指针问题
- C 语言:指针、free()与 NULL
- 你所不知道的事儿--C++中delete指针后最好赋值为NULL
- 你所不知道的事儿--C++中delete指针后最好赋值为NULL
- 教你如何配置linux用户实现禁止ssh登陆机器但可用sftp登录!
- JS Promise
- RabbitMQ 实战教程(二) 工作队列
- 各队列同步异步操作
- js变量的声明、作用域以及闭包
- free后指针为NULL?
- 从缓冲上看阻塞与非阻塞socket在发送接收上的区别
- 深度学习(四十一)cuda8.0+ubuntu16.04+theano、caffe、tensorflow环境搭建
- easyui datagride 删除选中的行
- JavaScript Math对象的属性定义的函数和常量
- 2016-10-11
- 8天学通MongoDB——第一天 基础入门
- 深度学习(四十二)word2vec词向量学习笔记
- 连锁不平衡的计算方法