动态内存分配

#include 
#include 

using namespace std;

// 动态内存分配
// 1、c中   使用 malloc 和 free ===> 库函数  不是语法的一部分
// 2、C++中 使用 new 和 delete  ===> 运算符(+、-、*...)  是语法的一部分
//   strlen 是函数,计算字符串长度    sizeof 运算符 计算变量类型所占空间大小

// 1、申请单个变量空间
int main1()
{
    int *p1 = (int *)malloc(sizeof(int)/sizeof(char));
    if(p1 == NULL)
    {
        cout << "p1 失败" << endl;
        return -1;
    }
    free(p1);

    // new : 类型* 变量名 = new 类型(初始值)
    int *p2 = new int;
    if (p2 == NULL)
    {
        cout << "p2 失败" << endl;
        return -1;
    }

    *p2 = 10;
    cout << *p2 << endl;

    // 释放 :delete 指针
    delete p2;

    // new 在申请空间的时候可以对空间进行初始化
    char *pc = new char('A');
    cout << *pc << endl;
    delete pc;


    return 0;
}


// 2、申请数组
int main2()
{
    // int a[10]
    int *p1 = (int *)malloc(sizeof(int)/sizeof(char) * 10);
    if(p1 == NULL)
    {
        cout << "p1 失败" << endl;
        return -1;
    }
    free(p1);

    // new : 类型 * 变量名 = new 类型[个数]  申请数组的时候不能进行初始化
    int *p2 = new int[10];
    if(p2 == NULL)
    {
        cout << "p2 失败" << endl;
        return -1;
    }

    // 释放:delete 释放数组的时候 一定要加 [] 不然会导致内存泄漏
    delete[] p2;


    return 0;
}

// 3、申请多维数组空间
int main()
{
    // int a[3][4];
    int (*pa)[4] = (int (*)[4])malloc(sizeof(int)/sizeof(char)*12);
    for (int i; i < 3; i++)
    {
        for (int j; j < 4; j++)
        {
            pa[i][j] = i*4+j;
        }
    }
    free(pa);

    int (*p2)[4] = new int[3][4];
    delete[] p2;

    int** p3 = new int*[3];
    for (int i = 0; i < 3; i++)
    {
        p3[i] = new int[4];
    }


    for (int i = 0; i < 3; i++)
    {
        delete[] p3[i];
    }
    delete[] p3;

    return 0;
}




你可能感兴趣的:(动态内存分配)