社区
C语言
帖子详情
为什么malloc申请的空间free后,指针变量的地址还存在??而且还能再次使用?如果一直malloc,free,那岂不是最后内存也会用尽???
好了么
2020-04-20 10:43:46
上面的代码运行后,已经把malloc的空间free了,但是p的地址还是没变,那是不是说明,还占有内存??
可能我一开始就想错了,求指点!!
...全文
870
3
打赏
收藏
为什么malloc申请的空间free后,指针变量的地址还存在??而且还能再次使用?如果一直malloc,free,那岂不是最后内存也会用尽???
上面的代码运行后,已经把malloc的空间free了,但是p的地址还是没变,那是不是说明,还占有内存?? 可能我一开始就想错了,求指点!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tobybo
2020-04-21
打赏
举报
回复
1.free 和 delete 内存释放是释放的指针指向的内存, 指针本身不会被你释放,在这里指针本身属于自动变量,会在程序块执行完后释放内存; 2.释放只是那块内存可以用作其他,并不会主动给你清理内存的数据,所以每次申请内存后最好设置一下初始值来覆盖以前的值; 3.p 指向的内存被释放了,但是你还可以利用p来操作那块地址,虽然可行,但这是一个未定义的操作,危险的操作,即访问一块未分配的内存空间,这里没出问题因为你刚分配过,释放后接着访问,而且只访问int大小的空间,如果你执行 *(p++) 之类的操作就可能引发严重的问题; 所以一般 释放指针指向的内存后 需要 p = NULL; 来将指针指向NULL 表示以前那块内存不再可用。 野指针 百度百科: 野指针主要是因为这些疏忽而出现的删除或申请访问受限内存区域的指针。
指针变量未初始化
任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。如果没有初始化,编译器会报错“ ‘point’ may be uninitializedin the function ”。
指针释放后之后未置空
有时指针在free或delete后未赋值 NULL,便会使人以为是合法的。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。此时指针指向的就是“垃圾”内存。释放后的指针应立即将指针置为NULL,防止产生“野指针”。
u俺的me
2020-04-21
打赏
举报
回复
楼上正解,说得很详细了,释放之后逻辑地址依然在那,只是你不应该人为去修改它,应该交由操作系统管理,后续再malloc使用,但是不能保证下次malloc到的一定是这个地址,不过对于用户来说这个并不重要,毕竟是逻辑地址而不是物理地址。
arfi
2020-04-21
打赏
举报
回复
通常我们访问的逻辑地址,你申请或者不申请,地址都在那里,你就可以往里面放东西。
但是,你得知道该地址是个有效地址,否则就可能程序崩溃(比如,你往地址为1的内存写入东西)
内存释放后,当前没有别人在用它,所以你仍然用了,但是这算是非法访问。针对多线程的程序来说,可能别人把这个内存地址刚给申请了,而你改写了他的东西,就会导致他那边出异常。
C/C++
指针
经典资料大全
-
指针
变量
需要先声明,再分配
内存
,然后才能通过解引用操作访问其所指向的值。 - C++中提供了三种基本类型的
指针
:普通
指针
、常量
指针
和
指针
常量。 -
指针
可以进行算术运算,如加减操作,用于遍历数组或字符串。...
C/C++
指针
的13份资料
12. **
指针
和引用**:C++中的引用是另一种间接访问
变量
的方式,但不同于
指针
,引用一旦初始化后必须始终引用同一对象,且不能为NULL。 13. **
指针
的安全性**:在
使用
指针
时,要避免未初始化的
指针
、空
指针
解引用、...
C语言:调用
free
()函数,释放掉所指向
空间
内容后,
指针
p还
存在
吗?
在c语言中,通过
malloc
函数动态
申请
的
内存
空间
,若
申请
成功,则
会
返回一个指向该
内存
地址
的
指针
,如果
申请
失败,则
会
返回NULL;若不再
使用
,则用
free
函数释放掉该
指针
指向的
内存
。
malloc
()函数的描述:void *...
关于
malloc
之后
free
函数报错的问题
思路:再加一个
指针
int* p=parr 指向
malloc
创建的首
地址
,如果
free
(p)成功,证明思路正确。今天学习动态
内存
管理
malloc
函数时,发现了一个小问题,再经过查阅资料,和实验验证后,终于明白了问题所在。而parr[1]...
不要将
malloc
后的
地址
赋予两个
指针
变量
!
不要将
malloc
后的
地址
赋予两个
指针
变量
!
free
函数释放后原
内存
空间
中值的变化。
C语言
70,037
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章