社区
C语言
帖子详情
困惑的内存释放问题,大家看看。。。
xjlqlqlq
2003-08-20 12:45:24
我创建一个节点(结构),并分配了内存,
使用后如何完全释放呢怎样才算释放完了?
我的做法:
//p为某结构指针,data为结构内的数据成员(int型)
free(p);
//但是我发现free()后还能访问p的数据成员,只不过其值是随机数了,所以添加如下
//一句代码显示。。。
printf("the value is %d \n",p->data);
为什么最后一句也正常运行不报错!
是不是说明内存没有释放干净。。。
请大家指点。。。
...全文
39
8
打赏
收藏
困惑的内存释放问题,大家看看。。。
我创建一个节点(结构),并分配了内存, 使用后如何完全释放呢怎样才算释放完了? 我的做法: //p为某结构指针,data为结构内的数据成员(int型) free(p); //但是我发现free()后还能访问p的数据成员,只不过其值是随机数了,所以添加如下 //一句代码显示。。。 printf("the value is %d \n",p->data); 为什么最后一句也正常运行不报错! 是不是说明内存没有释放干净。。。 请大家指点。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ehhl
2003-08-20
打赏
举报
回复
释放干净?什么意思,
这就是指针嘛!你free掉一个指针,它其实并没有被你干掉,而是仍在那个地方
所以为了防止你后来的情况,就要养成良好的习惯:在free掉一个指针后,一定要给他赋0
即:free(p);
p=NULL;
这就比较安全,即使你不小心再执行free(p)也不会发生错误。
sevecol
2003-08-20
打赏
举报
回复
free只是交还内存的所有权
free之后再去访问释放的内存区域行为是未定的。再去写数据到释放的内存区域是极其危险的。
一般free后将指针设置为NULL.
grail0922
2003-08-20
打赏
举报
回复
free只是交还内存的所有权
free之后再去访问释放的内存区域行为是未定的。再去写数据到释放的内存区域是极其危险的。
良好的习惯是free后将指针设置为NULL.
同样还有 delete
fancy123
2003-08-20
打赏
举报
回复
free(p);//此时p为野指针,危险。
p=NULL;//将p置为空指针。
另:一般声明一个指针,好习惯就是如果没有初值的话就设置为NULL.
int *p;
p=NULL;
xjlqlqlq
2003-08-20
打赏
举报
回复
谢谢大家。。。
dddd8888
2003-08-20
打赏
举报
回复
int *p = (int *)malloc(sizeof(int));
free(p);
p = NULL;
int *p = new int;
delete p;
p = NULL;
杜绝野指针,因为你不把指针设为NULL,p还是会志向垃圾内存
if (p == NULL) 无效
Wolf0403
2003-08-20
打赏
举报
回复
free(p);
p = NULL;
这是个好的编程习惯。
skywater
2003-08-20
打赏
举报
回复
对,free了并不表示象流放犯人一样把它释放到遥远的地方,他还在那个地方呆着呢,但是你已经没有控制权了,最好将释放掉的指针设为null。
2023 C++零基础入门视频教程
本课程是C++零基础入门课程,一共19个大章节,课件内容大概10万字,会尽量详细系统的把C++讲清楚,由于C++有一部分知识点和C语言重合,本课程也附带讲解C语言的知识点,学习本课程是同时掌握两门语言,前10章是C和C++的共同部分,如果出现二者的区别会分开讲解。本课程不会盲目的讲解C++语法,将会和Google开源C++项目WebRTC结合,介绍C++在实际项目中的应用,在部分章节会提供相应的算法题目巩固本章节的内容。除了C++的学习,本课程会提供一些软件开发的经验、方法,让大家少走一些弯路。C++虽然难学,但是也不是学不会,掌握好了C++,学习其它语言将会更轻松、愉快。课程章节内容概述第1、2、3、4、5章节作为C/C++基础,主要以理解为主,可以花费较少的时间;第6~~10章节讲解指针、
内存
管理、函数,需要多理解练习;第11章是C++的核心,类与对象;第12章,讲解C++的精华部分模板元编程;第13章节讲解C++的智能指针,这是C++程序设计的重要技术,需要多理解、练习;第14章C++标准库,以应用为主会稍微简单些;第15章介绍C++新标准中比较实用的知识点,会比较难,不好理解,需要勤加练习;第16章文件读写以练习为主,较简单;第17章多线程以理解练习为主,可以参考开源项目学习、应用。第18、19章主要是C++领域介绍,职业选择,C++学习方法推荐。第1章是C/C++历史、版本介绍、C++难点痛点分析、学习网站推荐、书籍推荐。第2章介绍C++开发环境搭建以及项目构建方法,调试方法,这是C++学习的第一步,是很关键的一步;本章主要介绍三种开发环境的安装与项目构建方法: (1)Windows Visual Studio C++ 开发环境; (2)Virtual Box虚拟机ubuntu C++ vscode ssh开发环境; (3)Windows WSL : windows linux子系统。课程会同时介绍在windows和linux下的C++开发,windows以vs2022为开发环境,linux以ubuntu vscode ssh gcc g++为代码编写环境。第3章是C++入门知识点讲解,数据类型,变量、输入输出、运算符等,该部分以理解记忆为主,可以快速学完。第4章讲解循环控制,if、for、while、do while、go。第5章是数组,讲解一维数组,二维数组,并提供了一些练习题,供学习巩固。第6章是指针与引用,该部分是C/C++学习的难点,也是众多C/C++程序员的噩梦,指针与引用内容是函数的基础,因此提到前面来。第7章讲解字符串,字符串是一个很复杂的数据类型,在C++中更是复杂,由于C++应用范围广,几乎每个C++框架都有自己的字符串实现方式,C++的字符串因此至少有十多种表现方式,因此我考虑把字符串作为单独章节,让大家在以后的开发中增加对字符串的理解。第8章是
内存
分配,独立分配
释放
内存
,也是C/C++区别其它语言的地方,程序员可以直接操作
内存
,但同时也为程序的编写带来了难度,
内存
管理不好,很容易出现程序无法商用的情况。除了基础的
内存
分配,本章节也会介绍
内存
池,为编写高性能C++程序打基础。第9章讲解函数,有了前面八章的铺垫,编程中的重要成员函数出现了,这一章的内容会稍微难些,要注意理解、练习,章节的最后提供了练习题,供学习巩固。第10章介绍结构体,在C语言中,结构体应用很广泛,这也是C语言结束的章节。第11章类与对象是C++的核心,本章的知识会比较多,会详细介绍类的各个知识点,名字空间、函数重载、构造函数、析构函数、深拷贝、浅拷贝、静态函数、继承、虚函数、多态、友元函数、友元类、运算符重载、类
内存
分析等等。第12章是模板元编程是C++最难的内容,也是写C++高性能程序的必经之路,模板元编程也是后面智能指针、标准库STL、多线程的基础。第13章讲解智能指针,会由浅入深的讲解
内存
分配
释放
与智能指针的关系,会全面介绍C++智能指针的应用。一个好的C++项目,基本是看不见new与delete,该章节会介绍一部分webrtc中的代码,
看看
优秀的C++项目是怎么写C++。第14章是C++标准库,学习C++编程中常用的工具类与算法组件,章节最后也提供了一些算法练习题,需要用到标准库的一些组件类。第15章讲解C++新标准的一些实用的知识点,该部分知识在实际项目中会用的比较多,也是不太好理解的部分。第16章介绍文件操作,先介绍文件操作的一些基本函数,然后介绍json, xml文件的操作方法。第17章是多线程,介绍C++ 11多线程、线程池的用法。第18章介绍C++开发的相关领域,是很重要的章节,也是以后工作的参考。第19章课程总结,以及后续学习指导。
freeRTOS
内存
释放
问题
vPortFree
vPortFree()
内存
释放
函数,
释放
两次并不会报错。但是应当避免。 今天在看别人代码的时候,发现一个
问题
,在不同的地方把一个指针指向的
内存
释放
了两次,但是程序运行是正常的。 虽然运行没出错误,但是程序的逻辑是有
问题
的。 所以我写了下面的语句测试了一下 vPortFree(pbuf); vPortFree(pbuf); 发现确实不会导致程序运行出
问题
,但是写代码应当避免这种情况。 ...
关于堆
内存
和栈
内存
释放
js 中的
内存
分为堆
内存
和 栈
内存
堆
内存
:存储引用类型值 (对象:键值对 函数:代码字符串) 栈
内存
: 提供JS代码执行的环境和存储基本类型值 堆
内存
释放
让所有引用堆
内存
空间地址的变量赋值给Null 即可 (没有变量占用这个堆
内存
了 浏览器会在空间的时候把它
释放
掉) 栈
内存
释放
一般情况下,当函数执行完成,所形成的私有作用域(栈
内存
)都会自动
释放
掉 (在栈
内存
中存储的值也都会被
释放
掉,但...
iframe
内存
释放
问题
随着Ajax的发展,使用javascript的RIA应用越来越多,用户在同一页面中驻留的时间越来越长,
内存
泄露和
内存
占用
问题
越来越值得RIA开发者的注意,当RIA应用中
内存
得不到合理的
释放
,
内存
使用量会持续上涨,造成RIA应用反应变慢甚至会造成用户浏览器崩溃。虽然这种
问题
很少显现,但并不是说明应用中不存在这种
问题
,只不过这些
问题
在用户页面跳转和关闭浏览器时被掩盖掉,当我们RIA应用要用户一直在同一
PHP的
内存
释放
问题
参考http://www.laruence.com/2011/03/04/1894.html。 初步总结: 1.PHP会自己有一个
内存
管理,它会一次性向系统多申请一些
内存
,然后自己分配。 2.PHP也是有计数器的概念,unset只是让计数器进行减一,不代表这块
内存
真的被
释放
了,只有当指向这块
内存
的引用数为0时,这块
内存
才得到
释放
,这个
释放
是还给PHP的
内存
管理。 以下是引用
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章