- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态 静态 分配问题 指针
动态内存分配问题
分类:程序之源
2006.6.13 17:14 作者:jiaozi1216 | 评论:0 | 阅读:236
?? c语言中可以用malloc()和free()函数,来动态分配内存。C++中使用new和delete两个函数。
这两天被动态内存分配折磨得不清。(基础太差,没办法)。
? 犯的错误主要有:
1.??????? 经常定义一个指针,不给其初始化就使用。所以经常遇到Access violation(Windows)或者段错误(Linux);
2.??????? 经常给一个指针赋一个地址,这个地址已经不存在了,还在用这个指针。于是又出现烦人的Access violation.
??? 一般的变量不会出现这样的问题,因为编译器已经给你做好了;但是由于动态分配内存是在堆空间进行的,当你已经释放了堆空间时,指针其实还是存在的,但是是不可用的,因为指针并不是在堆空间,所以你可能还会使用指针,这样就上当了,这是个陷阱。
? 总结:
以后在使用动态内存分配的时候要注意:
(1)???????? 一定要确保你使用的指针所指的地址的明确性。
(2)???????? 定义指针后,不要直接使用,必须给其初始化,即它能够指向物理上存在的地址空间。否则,经常会出现意想不到的错误,该指针可能被编译系统初始化为其他无效值。
(3)???????? 你动态分配的内存,一定要记得回收。
?
?
静态内存分配和?动态内存分配 (2008-07-27 19:40:52)
标签:静动态内存分配?杂谈? 分类:C++ 首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐。动态分配内存与静态分配内存的区别:
1) 静态内存分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的,动态内存的分配与释放需要占用CPU资源;2) 静态内存分配是在栈上分配的,动态内存是堆上分配的;3) 动态内存分配需要指针或引用数据类型的支持,而静态内存分配不需要;4) 静态分配内存需要在编译前确定内存块的大小,而动态分配内存不需要编译前确定内存大小,根据运行时环境确定需要的内存块大小,按照需要分配内存即可。可以这么说,静态内存分配是按计划分配,而动态内存5) 静态分配内存是把内存的控分配是按需分配。制权交给了编译器,而动态内存是把内存的控制权交给了程序员;
综上所述,静态分配内存适合于编译时就已经可以确定需要占用内存多少的情况,而在编译时不能确定内存需求量时可使用动态分配内存;但静态分配内存的运行效率要比动态分配内存的效率要高,因为动态内存分配与释放需要额外的开销;动态内存管理水平严重依赖于程序员的水平,如果处理不当容易造成内存泄漏。那么再具体些,如何选择内存分配方式,如果动态分配内存需要注意哪些问题呢?
? 需要强调的是,由于动态分配内存把内存的控制权交给了程序员,程序员有义务写代码确认内存分配成功能,如果分配失败要做适当处理,否则将给你的程序进而下一个定时炸弹,随时有可能因为动态内存分配失败而导致程序崩溃。
1. 全局变量尽可能不要动态分配内存。
? 既然将变量定义为全局变量,就为了其可见范围比较宽,因为可能这些变量在整个程序的运行期都是可见的,可能根本就没有机会释放全局变量所占用的内存,所以使用动态分配内存是意义不大的,只能给程序带来额外的运行负担。? 但对于全局变量内存大小不能确定的情况,可能会有例外。比如要处理一批数据,数据的大小可能由用户通过控制台参数形式告诉程序,这种情况可以动态按需分配内存,合理使用内存。? 而对于编译时能够确定内存使用量的全局变量,而且变量工作期(暂且这么叫吧,就是该变量还可能会被用到的这段时期)又与程序的运行期相同的情况根本没有必要动态分配内存。这种情况很有意思,就是使用动态分配内存,但可以不考虑释放这块内存,因为可以释放内存的时候该程序也要退出了,程序一结束,进程也就结束了,整个程序所在的虚拟空间已经被全部释放,也就没必要去添加释放内存的代码了。(但我确定见到过这样的代码)
2. 动态分配内存时,分配与释放的代码要对称。
? 这里说的分配与释放的代码对称指,分配内存的代码要与释放内存的代码在同一个范围的代码域中,例如在一个函数的开头申请内存,就应该在这个函数的结尾释放内存,否则,如果在一个函数内部分配内存,在函数外释放内存,就有可能因程序员的疏忽造成内存泄漏;如果内存分配在某个类的构造函数中,那么就应该在析构函数中释放内存,千不要在另外一个函数中释放,而等着客户代码去掉用那个函数去手动释放内存,如果那样的话就相当于埋了一个定时炸弹,随时可能因为一时的疏忽而造成内存泄漏。
3. 对动态创建的对象或分配的内存块一
您可能关注的文档
- 五年级下-数学-因数和倍数-第1课时终.ppt
- 品牌策划内容大纲.doc
- 和谐、高效、共赢.doc
- 中外会展经济发展的差距.doc
- 专题一 第一单元练习.doc
- Autoexec.bat文件制作.doc
- 中文planning02.ppt
- 七年级下册历史专题复习__人教版.初一下.ppt
- 资金预算方案.doc
- 三年级数学人教版第五册期末复习试题(一).doc
- 2024年秋季新外研版三年级上册英语课件 M10U2.pptx
- 2024年秋新人教版数学一年级上册课件 第2单元 6~10的认识和家、减法 2 6~9的加、减法 第5课时 8和9的加、减法.pptx
- 2024年秋新人教版一年级上册数学教学课件 五 20以内的进位加法 第6课时 练一练.pptx
- 2024年新人教版一年级数学上册课件 第四单元 11~20的认识 课时1 10的再认识.pptx
- 2024年新人教版数学一年级上册 第5单元 20以内的进位加法 4 解决问题 第3课时 练一练.pptx
- 2024年秋新人教版七年级上册数学教学课件 5.2 第2课时 移项.pptx
- 2024秋新鲁教版英语六年级上册课件 Unit 1 Section B (1a-1d) (第4课时).pptx
- 2024年新苏教版数学一年级上册全册教学课件 第一单元 0~5的认识和加减法练习二.pptx
- 2024年新鲁科版八年级上册物物理教学课件 第三章 光现象3.5 凸透镜成像的规律.pptx
- 2024年秋季新西师大版一年级上册数学课件 第二单元 0~9的加减法 2.认识减法 第3课时 做张减法表 .pptx
最近下载
- 金刚砂耐磨地坪工程劳务施工合同协议书范本.doc
- 2024年洛阳文化旅游职业学院单招职业技能测试题库精编答案.docx VIP
- DL_T 2078.2-2021CN 调相机检修导则 第2部分: 保护及励磁系统.docx
- GB39800.2-2020 个体防护装备配备规范 第2部分:石油、化工、天然气.pdf
- T_CIATCM 121-2024 共享中药房中药调剂信息系统建设指南.pdf VIP
- 优秀仓管员全能战实训练.doc VIP
- 2010太阳能热水系统在北京奥运村工程中的应用.pdf VIP
- 建筑工程安全资料全套整理版.doc
- 保健食品原料目录 营养素补充剂(2023年版).docx
- SA51024矽力杰 中文资料 规格书 pdf 下载电源管理芯片全线.pdf VIP
文档评论(0)