C++——动态分配内存

0.  介绍

在C++中,程序的内存空间分成两部分,堆和栈。

栈:在函数中声明的所有变量都存在栈里。

堆:是程序中未使用的内存,用来在程序运行时动态分配内存空间。

在C++中可以通过new和delete操作符来控制内存空间的申请和释放。

new:申请一段内存空间,并创建对象,返回内存空间的起始地址。

delete:删除分配的内存空间,防止内存泄漏。

1. new

new type_name

new申请的内存空间可以是任意内置数据类型,也可以是自定义的结构体或者类。

double* pvalue = NULL; // 初始化为 null 的指针
pvalue = new double; // 为变量请求内存

2. delete

当某个动态申请内存的对象不再使用了,用delete释放分配的内存空间。

delete pvalue; // 释放 pvalue 所指向的内存

3. 为数组动态分配内存

char* pvalue = NULL; // 初始化为 null 的指针
pvalue = new char[20]; // 为变量请求内存
delete [] pvalue;// 删除 pvalue 所指向的数组

如果是二维数组

int **array // 假定数组第一维长度为 m, 第二维长度为 n // 动态分配空间
array = new int *[m];
for( int i=0; i<m; i++ )
{
  array[i] = new int [n] ;
} //释放
  for( int i=0; i<m; i++ )
 {
  delete [] arrary[i];
}
delete [] array;

 

4. 为自定义对象分配内存空间

#include <iostream>
using namespace std;

class Box
{
   public:
      Box() {
         cout << "调用构造函数!" <<endl;
      }
      ~Box() {
         cout << "调用析构函数!" <<endl;
      }
};

int main( )
{
   Box* myBoxArray = new Box[4];

   delete [] myBoxArray; // 删除数组
   return 0;
}

  

参考:

https://www.runoob.com/cplusplus/cpp-dynamic-memory.html

原文地址:https://www.cnblogs.com/east1203/p/11595151.html

时间: 2024-08-10 09:46:26

C++——动态分配内存的相关文章

C中动态分配内存

//使用动态分配内存时,要包含头文件<stdlib.h> //malloc的参数为要分配的内存的字节数 //其返回所分配内存的第一个字节的地址 //返回类型是void*,但实际中常常转换为具体类型便于使用 //如果因某种原因而不能分配将返回NULL指针,所以使用时应验证是否分配成功 int *pNumber1=(int *)malloc(100*sizeof(int)); //calloc把内存分配为给定大小的数组,并初始化分配的内存为0 //calloc需要两个参数,1为数组元素个数,2为数

动态分配内存专题

我讲解一下c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为什么要通过函数来实现动态分配内存呢?系统难道不是会自动分配内存吗??既然有人会问这样的问题,那么我在这里好好的讲解一下吧!首先让我们熟悉一下计算机的内存吧!在计算机的系统中有四个内存区域:1)栈:在栈里面储存一些我们定义的局部变量以及形参(形式参数):2)字符常量区:主要是储存一些字符常量,比如:char *p_str="cgat";其中"cgat"就储存在字符常量区里面:3)全局区:在全

C++动态分配内存

动态分配(Dynamic Memory)内存是指在程序运行时(runtime)根据用户输入的需要来分配相应的内存空间. 1.内存分配操作符new 和 new[] Example: (1)给单个元素动态分配内存 int * pointer = new int; //动态分配一个用于存放整型变量的内存空间,并将该存储空间的地址返回给pointer (2)给多个元素(数组)动态分配内存空间 int * p = new int [10]; //动态分配可以存放10个整型变量的内存空间,并将该存储空间的首

标C编程笔记day06 动态分配内存、函数指针、可变长度參数

动态分配内存:头文件 stdlib.h malloc:分配内存 calloc:分配内存,并清零 realloc:调整已分配的内存块大小 演示样例: int *p=(int *) malloc(3*sizeof(int));//分配内存,成功返回首地址,失败返回NULL free(p);p=NULL;//释放分配的内存,并改动指针的值,避免出现野指针(指向一个地址,但地址已被回收) const 与指针: const int *p; //指针可变,指针相应的数据不可改动 int * const p;

c/c++动态分配内存和malloc的使用

c/c++动态分配内存  为什么需要动态分配内存 ---很好的解决的了传统数组的4个缺陷 动态内存分配举例 ---动态数组的构造 使用动态数组的优点:    1. 动态数组长度不需要事先给定: 2. 内存空间可以手动释放: 3. 在程序运行中, 动态内存空间大小可以通过realloc函数手动扩充或缩小  静态内存和动态内存的比较   静态内存是由系统自动分配,有系统自动释放 静态内存是在栈分配的 动态内存是由程序员手动分配,手动释放,动态内存是在堆分配的 动态内存和静态内存的比较 静态内存是由系

动态分配内存

1.自动分配内存:当定义一个基本类型的变量的时候,系统会为这个变量自动分配内存,这个内存在堆上.当作用域结束,系统        会自动讲这个内存回收. 动态分配内存:开发人员自己向系统申请的内存空间,申请的内存位于栈上,当作用域结束之后,系统是不会自动回收内存  的,这个内存必须由开发人员自己去释放,如果不释放,就内存泄露了. 2.什么时候需要动态分配内存 程序运行过程中,需要保存/记录相应的数据,但是有没有提前准备好内存,那么就需要临时动态分配内存. 3.使用的函数 void  *mallo

动态分配内存的初始化

9 下面哪种C/C++分配内存的方法会将分配的空间初始化为0 malloc() calloc() realloc() new[ ] 答案:B: 1) malloc 函数: void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化. 2)calloc 函数: void *calloc(unsigned int num, unsigned int si

比较C/C++和Delphi中的字符串和字符数组(数组和动态分配内存的情况)

本文所讲解的只是从其中一个方面来看待进行的总结,所以有必要结合<Delphi字符串与字符数组之间的转换(初始化的重要性)>等文章进行更全面的了解,会从更多方面来理解字符串.内存.类型转换 C/C++中的字符串.字符数组.字符指针分配的内存空间 我们知道在C/C++中,我们可以这样理解字符串和字符数组 1)字符串,就是一个以 '\0' 结尾的字符数组 2)字符数组,包括字符串,但是不一定要以 '\0' 结尾,如果不是以'\0' 结尾,那么就不能当做字符串使用 在C/C++中,使用字符串可以通过数

条款十一: 为需要动态分配内存的类声明一个拷贝构造函数和一个拷贝赋值运算符

看下面一个表示string对象的类: // 一个很简单的string类 class string { public: string(const char *value); ~string(); ... // 没有拷贝构造函数和operator= private: char *data; }; string::string(const char *value) { if (value) { data = new char[strlen(value) + 1]; strcpy(data, value

C语言-动态分配内存对任意个字符串进行排序

//动态分配内存对输入的任意字符串排序 #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> //比较大小 //int str_compare(const char* src,const char* dst) //{ // int ret = 0; // if (src == dst) // { // return 0; // } // if (dst == NU