当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

谈C/C++指针精华(二)[VC/C++编程]

赞助商链接



  本文“谈C/C++指针精华(二)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

1.3指针与内存管理

操纵指针你可以将数据写入内存中的肆意位置,但是,一旦你的程序中有一个野指针("wild“pointer),即指向一个错误位置的指针,你的数据就危险了—存放在堆中的数据大概会被破坏,用来管理堆的数据构造也大概会被破坏,乃至操作系统的数据也大概会被改正,有时,上述三种破坏情形会同时发生.所以公道的精确的分配指针的地址是非常重要的.

1.3.1内存分配的方法

内存分配方法有三种:

(1)从静态存储区域分配.内存在程序编译的时刻就已经分配好,这块内存在程序的整个运行期间都存在.比方全局变量,static变量.

(2)在栈上成立.在履行函数时,函数内部分变量的存储单元都可以在栈上成立,函数履行完毕时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集合,效率很高,但是分配的内存容量有限.

(3) 从堆上分配,亦称动态内存分配.程序在运行的时刻用malloc或new申请肆意多少的内存,程序员自己负责在什么时刻用free或delete释放内存.动态内存的生存期由我们决意,利用非常机动,但问题也最多,以下我们重点讲授动态内存分配.

1.3.2 malloc/free 的利用要点

malloc与free是C/C++语言的尺度库函数,它用于申请动态内存和释放内存.

函数malloc的原型以下:

void * malloc(size_t size);

用malloc申请一块长度为length的整数范例的内存,程序以下:

int *ip = (int *) malloc(sizeof(int) * length);

我们该当把注意力集合在两个要素上:“范例转换”和“sizeof”.

malloc函数返回值的范例是void *,所以在调用malloc时要显式地举行范例转换,将void * 转换成所需求的指针范例.

malloc函数本身并不辨认要申请的内存是什么范例,它只关心内存的总字节数.比方int变量在16位系统下是2个字节,在32位下是4个字节;而float变量在16位系统下是4个字节,在32位下也是4个字节.这个你可以用sizeof(范例)去测试.

在malloc的“()”中利用sizeof运算符是杰出的气势,但要当心有时我们会昏了头,写出 ip = malloc(sizeof(ip))这样的程序来.

函数free的原型以下:

void free( void * memblock );

为什么free函数不象malloc函数那样复杂呢?这是因为指针p的范例以及它所指的内存的容量事前都是知道的,语句free(p)能精确地释放内存.假如p是NULL指针,那么free对p无论操作多少次都不会出问题.假如p不是NULL指针,那么free对p持续操作两次就会招致程序运行错误.


  以上是“谈C/C++指针精华(二)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

本文地址: 与您的QQ/BBS好友分享!
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .