当前位置: 首页 > news >正文

青海省网站建设_网站建设公司_PHP_seo优化

网站 linux 服务器,深圳建网站的网络公司,免费wordpress模板下载,重庆市有网站设计维护文章目录 1、动态分配内存的应用2、动态分配内存与分配给普通变量的内存有什么不同?3、C 中如何分配/释放内存4、new 操作符4.1 使用new的语法4.2 初始化内存4.3 分配内存块4.4 普通数组声明 Vs 使用new4.5 如果运行时没有足够内存可用怎么办#xff1f; 5、delete 操作符 C/… 文章目录 1、动态分配内存的应用2、动态分配内存与分配给普通变量的内存有什么不同?3、C 中如何分配/释放内存4、new 操作符4.1 使用new的语法4.2 初始化内存4.3 分配内存块4.4 普通数组声明 Vs 使用new4.5 如果运行时没有足够内存可用怎么办 5、delete 操作符 C/ C中的动态内存分配是指由程序员手动执行内存分配。动态内存分配是在堆上进行非静态变量和局部变量在栈上分配内存。 1、动态分配内存的应用 动态分配内存的一种用途是分配可变大小的内存这对于编译器分配的内存来说是不可能的除非是可变长度的数组。最重要的用途是提供给程序员的灵活性。无论何时需要或不再需要我们都可以自由地分配和释放内存。这种灵活性在很多情况下都很有用。例子有链表、树等。 2、动态分配内存与分配给普通变量的内存有什么不同? 普通变量 int achar str[10] 等的内存是自动分配和释放的。对于像“int *p new int[10]”这样动态分配的内存当不再需要内存时释放内存是程序员的责任。如果程序员不释放内存就会导致内存泄漏直到程序终止才释放内存。 3、C 中如何分配/释放内存 C语言使用 malloc() 和 calloc() 函数在运行时动态分配内存使用 free() 函数释放动态分配的内存。C 除了支持这些函数还提供了 new 和 delete 两个操作符可以更好、更简单地分配和释放内存。 4、new 操作符 new操作符表示在空闲存储区Free Store上分配内存的请求。如果有足够的内存可用new运算符会初始化内存并将新分配的已经初始化的内存的地址返回给指针变量。 4.1 使用new的语法 pointer-variable new data-type;这里的指针变量是data-type类型的指针。数据类型可以是任何内置数据类型(包括数组)也可以是任何用户定义数据类型(包括结构体和类)。 例子 // Pointer initialized with NULL // Then request memory for the variable int *p NULL; p new int; OR// Combine declaration of pointer // and their assignment int *p new int; 4.2 初始化内存 也可以使用new操作符初始化内置数据类型的内存。对于自定义数据类型需要一个构造函数(输入数据类型)来初始化值。下面是这两种数据类型初始化的例子: 语法 pointer-variable new data-type(value);例子 int* p new int(25); float* q new float(75.25);// Custom data type struct cust {int p;cust(int q) : p(q) {}cust() default;//cust operator(const cust that) default; };int main() {// Works fine, doesn’t require constructorcust* var1 new cust;//OR// Works fine, doesn’t require constructorvar1 new cust();// Notice error if you comment this linecust* var new cust(25);return 0; }4.3 分配内存块 还可以使用new运算符来分配一个类型为data type 的内存块一个数组 语法 pointer-variable new data-type[size];其中 size变量 指定了数组中元素的个数。 例子 int *p new int[10]动态地为连续10个 int 类型的整数分配内存返回一个指向数组的第一个元素的指针该元素被赋值为 p指针。p[0] 表示第1个元素p[1] 表示第2个元素以此类推。 4.4 普通数组声明 Vs 使用new 普通数组声明和使用 new 分配内存块是有区别的。最重要的区别是普通数组是由编译器释放内存的如果数组是局部的那么函数返回或完成时释放。但是动态分配内存的数组只有当程序员释放或程序终止时才会释放否则就一直占用该内存。 4.5 如果运行时没有足够内存可用怎么办 如果堆中没有足够内存可供分配new 操作就会通过抛出一个 类型为std::bad_alloc 异常来表示失败除非 new 操作符使用了 “nothrow”这种情况下它会返回一个 NULL 指针。因此在使用 new 创建的指针前最好先进行检查。 int *p new(nothrow) int; if (!p) {cout Memory allocation failed\n; }5、delete 操作符 因为释放动态分配的内存是程序员的责任所以C语言为程序员提供了 delete 操作符。 语法 // Release memory pointed by pointer-variable delete pointer-variable; 此处的指针变量指向的是由 new 创建的数据对象。 例子 delete p; delete q;要释放指针变量指向的动态分配内存的数组可以使用以下形式的delete // Release block of memory // pointed by pointer-variable delete[] pointer-variable; Example:// It will free the entire array// pointed by p.delete[] p;完整例子源码 // C program to illustrate dynamic allocation // and deallocation of memory using new and delete #include iostream using namespace std;int main () {// Pointer initialization to nullint* p NULL;// Request memory for the variable// using new operatorp new(nothrow) int;if (!p)cout allocation of memory failed\n;else{// Store value at allocated address*p 29;cout Value of p: *p endl;}// Request block of memory// using new operatorfloat *r new float(75.25);cout Value of r: *r endl;// Request block of memory of size nint n 5;int *q new(nothrow) int[n];if (!q)cout allocation of memory failed\n;else{for (int i 0; i n; i)q[i] i1;cout Value store in block of memory: ;for (int i 0; i n; i)cout q[i] ;}// freed the allocated memorydelete p;delete r;// freed the block of allocated memorydelete[] q;return 0; }输出 Value of p: 29 Value of r: 75.25 Value store in block of memory: 1 2 3 4 5 时间复杂度 O ( n ) O(n) O(n) n n n给定的内存大小。 注意 delete 可以释放空指针 int *ptr NULL; //Work fine! delete ptr; 同一个指针不能使用两次delete这是未定义行为 #includeiostream using namespace std;int main() {int *ptr new int;delete ptr;//为同一个指针调用两次delete是未定义的行为任何情况都可能发生程序可能会crash也可能没有任何问题delete ptr;return 0; }翻译自文章 new and delete Operators in C For Dynamic Memory
http://www.lebaoying.cn/news/40036.html

相关文章:

  • 谷歌做自己的网站广西翔路建设有限责任公司网站
  • 昆山门户网站网站图片自动下载
  • 企业vi怎么设计北京seo网站管理
  • 网站建设 用什么语言wordpress如何添加自定义字段
  • 制作网站赚钱吗创意网络
  • 网站伪静态好还是静态好wordpress 多媒体尺寸
  • 自己做的网站打不开了简易网址制作
  • 招聘网站费用怎么做分录深圳全网营销网站
  • 三合一网站有必要吗长沙人才市场招聘网最新招聘
  • a3网站建设网站显示已备案
  • 后缀的域名暂无法进行网站备案网站收录提交接口
  • 图片外链生成宁波抖音seo公司
  • 工业设计网站外网广州菜谱制作公司
  • php开发网站建设书籍iis7 网站防盗链
  • 广州市网站建设 合优网站可以同时做竞价和优化吗
  • 打开网站访问慢免费空间凡科
  • 徐州机票网站开发100个销售技巧和话术
  • 杭州91网站建设赣州网络问政
  • 音乐 版权 做视频网站专业的免费网站建设
  • 制作网站教程国外做giveaway的网站
  • 国外网站开发技术现状学校网页制作视频教程
  • 做电子商务网站 语言开发公司解除前期物业服务合同
  • 建立网站的第一步是建立什么网站建设费入什么科目
  • 公司网站开发的核心技术福建省建设安全监督站的网站
  • 句容网站定制推广软件公司
  • 网站地图制作怎么做项目代理
  • 网站注册表单怎么做国家工商官网查询
  • 在百度云上建设网站wordpress系统语言设置中文乱码
  • 网站字体设计规范沧州小程序开发制作
  • 网站配色案例有做彩票网站平台的吗