当前位置:首页 » 文件传输 » 可以访问已经释放的内存吗
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

可以访问已经释放的内存吗

发布时间: 2022-06-25 05:06:14

‘壹’ c语言中再次释放已经释放的空间会造成什么后果

free再次释放已释放的空间,不会有任何释放效果,因为free释放地址,是对地址作标记,表示该地址未被使用,可以再次用于分配。并不是说内存就消失了。

(注意:1,free后原内存中的数据,不变或被重置。2,free后不会自动将指针置NULL,需要手动置NULL,继续用指针访问已释放的地址是不安全的。)

下面演示代码(正常不要这么写!!!)

#include <stdio.h>

#include <malloc.h>

int main()

{

int *p=NULL;

p=(int *)malloc(sizeof(int));

*p=123;

printf("p初值:%d ",*p);

free(p);

printf("第一次释放后! ");

printf("p=%d ",*p);

printf("指针未置NULL的情况下,再次给指针指向地址赋值123后: ");

*p=123;

printf("p再次赋值%d ",*p);

free(p);

printf("再次释放后 ");

printf("p=%d ",*p);

return 0;

}

‘贰’ 在一个线程内用malloc分配内存,那么在同一个进程中启动的另外一个线程能访问该内存嘛求大侠解救

能访问,不过不同线程间访问同一内存地址时,可能会造成冲突
如果都是读操作的话没问题
如果一边读,一边写,或者两边都在写,那就可能造成错误,这时候就要进行锁操作

‘叁’ c语言中,molloc的空间用free释放后仍然可以通过指针访问那段空间,系统究竟啥时候真正回收那段内存

内存都是用地址编好了每一”格“的,一个地址对应一“格”,定义一个指针时,系统为指针随机赋一个内存大小范围内的地址,所以该指针肯定指向内存的某一“格”。如果没对指针进行赋值便使用(如p->next之类的),一般情况下在windows中运行时会提示非法访问内存,然后程序崩溃(调试时经常出现的情况),如果其他操作系统没有这样保护的话,可以使得指针任意访问内存,这是非常危险的,所以尽量别出现野指针。
1、因为定义的指针已指向一个地址,所以可以*p=5;
2、定义指针时并不是开辟内存空间,指定指针类型主要是为了在 *p 访问指针指向内容时可以确定怎样读取这块连续的内存(例如int与long所占的字节是不同的)

‘肆’ 为什么访问free函数释放的内存,会引起灾难性的后果

关于用malloc分配的内存,在调用free释放后,该内存的状态,有以下几点说明:
1.调用free释放掉所分配的内存后,表明该内存可以被别人使用,也就是说,其他地方调用malloc后,可以分配到该内存
2.关于free释放该内存后,该内存中的数据,我们只能认为是脏数据;也就是说,这部分数据可能存在并且维持原来的值,也可能被清空,或者被修改为其他值;
由此可见,有很多中可能情况,所以,在释放了该内存后,除了要对当时分配的指针赋值为NULL,还要注意不要再去引用这部分内存,不要尝试获取这部分的值,这些已经非法。

‘伍’ 释放了该对象的内存,但是为什么指针还能访问该对象

对象或数组被释放所占空间内容系统会去清空因没必要之程序其代码需要分配内存时候块内存能会被系统重新利用重新分配被新对象、变量或数组占用并会被重新初始化 因此当释放块内存(包括对象、变量、数组等)没有被重新分配掉(数据没被破坏)还通过指针访问安全无法确定系统时候会分配掉系统内存分配机制复杂我们也没必要去关心

‘陆’ 关于野指针问题。内存被释放,为什么不能使用这块内存。

free函数实现通知系统回收相关资源,即让当前分配的内存可以重新被其他应用所使用。
如果你还想使用这块内存就不要去释放它!(好比是,你借了别人的车,用完后,还给了人家,还给人家后,你还要开人家的车,能行吗?)
引用别人的描述:
3、free()到底释放了什么

这个问题比较简单,其实我是想和第二大部分的题目相呼应而已!哈哈!free()释放的是指针指向的内存!注意!释放的是内存,不是指针!这点非常非常重要!指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,前面我已经说过了,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。非常重要啊这一点!
参考:
http://forum.byr.e.cn/pc/pccon.php?id=315&nid=68136

‘柒’ htc 手机内存如何访问,释放空间啊

手机必须取得ROOT权限,然后可以安装R.E文件管理器,就可以访问手机内存了

‘捌’ c++中被释放的对象生命周期还有多久就是对象已经通过析构函数释放,但是还可以访问这个对象,持续

如果对象或数组被释放,所占空间中的内容系统不会去清空,因为没必要,之后程序中的其他代码在需要分配内存的时候,这块内存很可能会被系统重新利用重新分配,被新的对象、变量或数组占用,并会被重新初始化。

因此当你释放一块内存后(包括对象、变量、数组等),没有被重新分配掉(数据没被破坏),还是可以通过指针访问,但是这是不安全的,你无法确定系统什么时候会分配掉,系统的内存分配机制很复杂,我们也没必要去关心它。

‘玖’ VPS内存满了需要重启么访问还可以访问的

不一定非要重启才可以解决. 可以在VPS的任务管理器中把一些无用的程序停止掉.释放一些内存.也可以通过一些软件来整理系统内存.优化大师自带的内存整理工具就不错.可以把一些不用的内存释放出来.另外一些没用的程序尽量不要安装.有一些用户习惯在VPS上安装IIS.MYSQL.SQL等各种程序.其实没必要全部安装.只装用的上的即可.尤其SQL是很占内存的. 如果条件允许的话建议你升级到更高配置吧.否则内存占满会影响到速度
我是从事IDC行业的.以上回答希望对你有所帮助.有不懂的可以来问我

‘拾’ object-c 内存释放是什么意思dealloc后对象还能访问

其实在对象的保留计数值(retainCount)为1时,做释放操作,iOS就不会再对该对象所在的堆内存空间做更改了,只是在告诉系统,这块内存现在可被重新分配(也就是回收到空闲块区).当然你还有这段内存的地址,访问它此时已经是不安全的了,因为它随时可能被分配.