C++动态内存申请和练习

简介: C++动态内存申请和练习

C++动态内存申请和练习

C++动态内存申请

C++申请的内存是自由存储区, C语言的堆区内存, 所以C++类对象的内存, 不能用malloc

new申请内存

申请单个内存

#include<iostream>
using namespace std;
int main()
{
    //申请单个内存
    //方法一: 不初始化
    int* p1 = new int;
    *p1 = {123};
    //方法二 : 初始化
    int* p2 = new int(123);
    system("pause");
    return 0;
}

申请一段内存

//方法二 : 初始化
    int* p2 = new int(123);
    //申请一段内存
    //直接赋初值
    int* p3 = new int[3]{1, 2 ,3};
    //打印
    for (int i = 0; i < 3; i++)
    {
        cout << p3[i] << endl;
    }
    //不初始化
    int* p4 = new int[3];
    *p4 = (1 ,2, 3);

delete

释放单个内存

delete +指针名

//申请单个内存
    //方法一: 不初始化
    int* p1 = new int;
    *p1 = {123};
    delete p1;
    p1 = nullptr; //等效C语言中  p1 = NULL;

释放一段内存

delete [] 指针名(一维数组,二维数组都是一样的)

//不初始化
    int* p4 = new int[3];
    *p4 = (1 ,2, 3);
    delete[] p4;
    p4 = nullptr;

练习

练习1

用new创建一个空间,拿20个放字符,20个放存整数

#include<iostream>
using namespace std;
int main()
{
    char* p1 = new char[1000];
    char* p2 = new(p1) char[20] { "I LOVE YOU" };
    //p1 + 20 表示位置,前面占了20个位置
    int* p3 = new(p1 + 20) int[5]{ 1, 2, 3 ,4, 5}; 
    //等效于 int * p3 = new(p2 + 20) int[3]{1, 2, 3, 4, 5};
    delete[] p1;
    p1 = nullptr;
    system("pause");
    return 0;
}

练习2

在结构体中申请空间,结构体的元素有年龄,性别,并完成赋值

这里其实需要注意的是哦,struct 是一个数据类型

进行赋值的时候要用{},括起来, 不然会把报错

#include<iostream>
using namespace std;
struct MM
{
    char name[20];
    int age;
    int num;
};
void testOne()
{
    MM* pMM = new MM({ "name",12,1101 });
    cout << pMM->name << "\t" << pMM->age << "\t" << pMM->num << endl;
}
相关文章
|
28天前
|
存储 编译器 C语言
【C++】C\C++内存管理
【C++】C\C++内存管理
【C++】C\C++内存管理
|
27天前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
|
8天前
|
C语言 C++
C++(二)内存管理
本文档详细介绍了C++中的内存管理机制,特别是`new`和`delete`关键字的使用方法。首先通过示例代码展示了如何使用`new`和`delete`进行单个变量和数组的内存分配与释放。接着讨论了内存申请失败时的处理方式,包括直接抛出异常、使用`try/catch`捕获异常、设置`set_new_handler`函数以及不抛出异常的处理方式。通过这些方法,可以有效避免内存泄漏和多重释放的问题。
|
29天前
|
存储 Java C语言
【C++】C/C++内存管理
【C++】C/C++内存管理
|
1月前
|
存储 编译器 C语言
C++内存管理(区别C语言)深度对比
C++内存管理(区别C语言)深度对比
58 5
|
22天前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
35 0
|
2月前
|
NoSQL Redis C++
c++开发redis module问题之在复杂的Redis模块中,特别是使用第三方库或C++开发时,接管内存统计有哪些困难
c++开发redis module问题之在复杂的Redis模块中,特别是使用第三方库或C++开发时,接管内存统计有哪些困难
|
2月前
|
存储 C语言 C++
【C/C++】动态内存管理( C++:new,delete)
C++的`new`和`delete`用于动态内存管理,分配和释放内存。`new`分配内存并调用构造函数,`delete`释放内存并调用析构函数。`new[]`和`delete[]`分别用于数组分配和释放。不正确匹配可能导致内存泄漏。内置类型分配时不初始化,自定义类型则调用构造/析构。`operator new`和`operator delete`是系统底层的内存管理函数,封装了`malloc`和`free`。定位`new`允许在已分配内存上构造对象,常用于内存池。智能指针等现代C++特性能进一步帮助管理内存。
|
2月前
|
存储 编译器 程序员
【C/C++】动态内存管理(C:malloc,realloc,calloc,free)
探索C++与C语言的动态内存管理:从malloc到new/delete,了解内存分布及栈、堆的区别。文章涵盖malloc、realloc、calloc与free在C中的使用,强调内存泄漏的风险。C++引入new和delete,支持对象构造与析构,还包括operator new和placement-new。深入分析内存管理机制,揭示C与C++在内存处理上的异同。别忘了,正确释放内存至关重要!
|
2月前
|
算法 Java C++
C++和Python在内存管理上的主要区别是什么?
【7月更文挑战第2天】C++和Python在内存管理上的主要区别是什么?
71 1