博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
连续free()两次会出现什么情况
阅读量:5323 次
发布时间:2019-06-14

本文共 713 字,大约阅读时间需要 2 分钟。

1.free()之后能不能访问数据

#include 
#include
int main(){ int *p = NULL; printf("%p\n",p); p = (int *)malloc(2*sizeof(int)); printf("%p\n",p); p[0] = 2; p[1] = 3; printf("%d\n",p[0]); printf("%d\n",p[1]); free(p); printf("%p\n",p); //free之后p的地址没变,只是将申请的8个字节的内存区域还给了系统 printf("%d\n",*p); //按说是应该打印出来p[0]=2的,但是不是,为什么?还给系统之后数据应该还在啊 return 0;}

输出结果如下:

因为释放指针,只是将指针所指的内存空间交还给系统,而指针变量的内容(即刚释放的内存地址)并为改变,

所以还能输出。但此时的指针一般称之为“野指针”,是很危险的。所以,一般要求释放指针后,紧接着将其置为空:

free(p);

p=NULL;

 

2.连续free()两次会出现什么情况

当你第一次free之后,就将这块内存归还给系统了,系统有可能马上就将它分配给了其它程序,你再free会造成什么?

这实际就是对任意内存free,比如free((void*)123456)

转载于:https://www.cnblogs.com/wufengv5/archive/2013/06/05/3118797.html

你可能感兴趣的文章
ASP.NET 4.5 Web Forms and Visual Studio vs2013年入门1
查看>>
JUC - ReentrantLock 的基本用法 以及 lock()、tryLock()、lockInterruptibly()的区别
查看>>
java 连接 Access数据库的两种方法
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>
HDU 2063 过山车
查看>>
高精度1--加法
查看>>
在线文件管理器elFinder支持中文
查看>>
String比较
查看>>
Django之Models
查看>>
Spring缓存注解@Cache使用
查看>>
CSS 透明度级别 及 背景透明
查看>>
Linux 的 date 日期的使用
查看>>
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
C# JSON字符串序列化与反序列化
查看>>
HTTPS、SPDY和HTTP/2的性能比较
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
sublime快捷键
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>