C++语言教学中内存使用的若干问题.docVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++语言教学中内存使用的若干问题   摘要:该文主要探讨了C++语言教学中在数组使用、动态内存管理、指针使用、浅拷贝等方面应注意的若干问题,并指出正确的处理方法,最后介绍了C++/CLR中的内存管理机制。   关键词:数组;动态内存管理;指针;浅拷贝;CLR   中图分类号:G642文献标识码:A文章编号:1009-3044(2009)31-0000-00      Some Notices about the Use of Memory in C++ Language Teaching   RUAN Zong-li, CHEN Hua, ZHANG Hua-qing   (College of Mathematics and Computation Science, China University of Petroleum, Dongying 257061, China)   Abstract: In this paper, some problems about the use of array, dynamic memory management, pointer, shallow copy and so on in c++ language teaching are discussed. The correct methods of operating are given. In the end, memory management mechanism of C++/CLR is introduced briefly.   Key words: array; dynamic memory management; pointer; shallow copy; CLR      程序设计语言C++在科研、教学、工程、生产、设计等领域具被广泛使用,这得益于它的直接访问内存的灵活、支持面向对象机制、代码运行高效等优点。但是,从教学实践中发现,作为初学者,在用C++编写程序时很容易出错,因此有必要指出其中的出错点。   下面先探讨ISO/ANSI C++中内存访问中值得注意的几个问题。   1 数组使用   数组是一种线性表数据结构,系统为其分配连续的内存空间,即数据元素按索引顺序连续存储,可以通过下标运算方便快速地访问其中数据,它在程序设计中被频繁使用。以下3个问题需要注意:   1)声明数组时指定的长度一定是常量表达式   int A[10],B[10+5];//正确,10和5为字面常量,故10和10+5均为常量表达式   int n=10;   int C[n],D[n+5];//错误,n为变量,故n和n+5均为变量表达式   const int N=10;   int E[N],F[N+5];//正确,N为符号常量,N和N+5均为常量表达式   2)访问不要越界,包括数组上界和下界   假设有数组int A[10];,则A[i]中的i只能为0到9,而小于0或大于9都属于越界,越界访问可能导致不可意料的错误,例如试图访问的操作系统所占用的内存,非常危险。C++编译器并没有给数组访问做越界检查,因此只有程序员谨慎使用。   3)数组长度不能过大   数组所占用的空间是连续的,即一个元素的空间紧挨着下一个元素的空间,这些空间是由编译系统自动分配的。编译系统自动分配的内存在被称为栈的内存块上[1],栈的的大小是一个编译时就确定的常数,如果申请的空间超过栈的剩余空间时,将提示溢出。因此,能从栈获得的空间较小。   如果元素数量很大,则不宜使用长度固定的数组,取而代之的可以是链表或动态分配的数组等,尤其是链表,系统将其每一个元素分配内存中任意一块可用的空间,整个链表占用的空间是非连续的,这是与数组的重要区别之处,但是链表元素不能像数组一样能随机访问,而只能顺序访问,显然效率要低。   链表结点元素空间是在被称为堆的内存块上申请的[1]。操作系统有一个记录堆上空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。动态申请的内存也是在堆上分配的。一般情况下,堆内存远比栈内存大,动态分配大块连续内存空间的成功率较高。   2 动态内存管理   运算符new/delete用于完成动态内存的申请与释放,使用中应注意以下几点:   1)动态申请不成功   以int *p=new int[n];为例,语句中动态申请有可能不成功,例如n很大而堆上空闲的连续内存空间都很小时,此时new 运算返回空指针,使用时应作检查,如果为空即p==0,则不能进行后续操作。程序中做这种检查是一个好的习

您可能关注的文档

文档评论(0)

yingzhiguo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档