动态分配内存--new、delete

C++中使用new/delete用来动态分配、回收内存空间。

#include<iostream>
using namespace std;
int main()
    {
        int * pi = new int;
        cout << (void*)pi << endl;
        *pi = 1234;
        cout << *pi << endl;
        delete pi;//删除pi的目标,pi是局部变量。释放内存
        cout << (void*)pi << endl;//变成野指针,但pi指向的地址并没有变化
        pi = NULL;//置空。

        ///////初始化

        pi = new int(100);
        cout << *pi << endl;
        delete pi;
        pi = NULL;

        ///////分配数组,无初值,用数组方式new的,必须以
        //数组方式(delete [])释放
        int i=0,j=0;
        pi = new int [10];
        for ( i = 0; i < 10 ; i++)
            pi[i] = i+1;
        for ( i = 0; i < 10 ; i++)
            cout << pi[i] << endl;
        cout << endl;
        delete [] pi;
        pi = NULL;

        ///初始化数组

        pi = new int[3]();//初始值为0
        for ( j = 0; j < 3; j++)
            cout << pi[j] << endl;
        delete [] pi;
        pi = NULL;

        //////////动态创建二维数组/////////

        int (*pa)[4] = new int [3][4]();//初始值为0,指针数组
        for (i = 0; i < 3; i++)
            for(j = 0; j < 4; j++)
                cout << pa[i][j] << endl;
            delete [] pa;
            pa = NULL;

        return 0;}
时间: 2024-10-16 04:13:48

动态分配内存--new、delete的相关文章

C++动态分配内存

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

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

看下面一个表示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&amp;C++动态分配内存(手动分配内存)三种方式

1. malloc函数 函数原型:void *malloc(unsigned int size)函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以看到,函数返回值是一个void指针,请注意,void指针不是一个可以指向任何类型数据的指针,而是 说,不指向任何类型的数据,仅仅是提供了一个地址.因而,你想让这个指针指向int型数据,要进行显式的类型转换(强制类型转换),即在前面加(int *).一般来说,如果不加,是可以自动进行隐式类型转换的. 2.

C++——动态分配内存

0.  介绍 在C++中,程序的内存空间分成两部分,堆和栈. 栈:在函数中声明的所有变量都存在栈里. 堆:是程序中未使用的内存,用来在程序运行时动态分配内存空间. 在C++中可以通过new和delete操作符来控制内存空间的申请和释放. new:申请一段内存空间,并创建对象,返回内存空间的起始地址. delete:删除分配的内存空间,防止内存泄漏. 1. new new type_name new申请的内存空间可以是任意内置数据类型,也可以是自定义的结构体或者类. double* pvalue

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编程笔记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