动态内存管理(下)

简介: 动态内存管理(下)

@TOC
感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒个人主页
🥸🥸🥸C语言
🐿️🐿️🐿️C语言例题
🐣🐓🏀python

常见的动态内存的错误

对NULL指针的解引用操作

void test()
{
   
    int* p = (int*)malloc(INT_MAX / 4);
    *p = 20;//如果p的值是NULL,就会有问题
    free(p);
}

对动态开辟空间的越界访问

void test()
{
   
    int i = 0;
    int* p = (int*)malloc(10 * sizeof(int));
    if (NULL == p)
    {
   
        exit(EXIT_FAILURE);
    } f
        or (i = 0; i <= 10; i++)
    {
   
        *(p + i) = i;//当i是10的时候越界访问
    } f
        ree(p);
}

对非动态开辟内存使用free释放

 void test()
{
   
    int a = 10;
    int *p = &a;
    free(p);//ok?
}

使用free释放⼀块动态开辟内存的⼀部分

void test()
{
   
    int *p = (int *)malloc(100);
    p++;
    free(p);//p不再指向动态内存的起始位置
}

对同⼀块动态内存多次释放

void test()
{
   
    int *p = (int *)malloc(100);
    free(p);
    free(p);//重复释放
}

动态开辟内存忘记释放(内存泄漏)

void test()
{
   
    int *p = (int *)malloc(100);
    if(NULL != p)
    {
   
        *p = 20;
    }
} 
int main()
{
   
    test();
    while(1);
}

忘记释放不再使用的动态开辟的空间会造成内存泄漏。
切记:动态开辟的空间⼀定要释放,并且正确释放

目录
相关文章
|
编译器
【动态内存管理】
【动态内存管理】
73 0
|
4月前
|
存储 缓存 C语言
【c++】动态内存管理
本文介绍了C++中动态内存管理的新方式——`new`和`delete`操作符,详细探讨了它们的使用方法及与C语言中`malloc`/`free`的区别。文章首先回顾了C语言中的动态内存管理,接着通过代码实例展示了`new`和`delete`的基本用法,包括对内置类型和自定义类型的动态内存分配与释放。此外,文章还深入解析了`operator new`和`operator delete`的底层实现,以及定位new表达式的应用,最后总结了`malloc`/`free`与`new`/`delete`的主要差异。
94 3
|
5月前
|
程序员
动态内存管理
动态内存管理
30 0
|
9月前
|
程序员 C语言 C++
动态内存管理(2)
动态内存管理(2)
57 1
|
9月前
|
存储 Linux C语言
5.C++动态内存管理(超全)
5.C++动态内存管理(超全)
|
9月前
|
程序员
21.动态内存管理
21.动态内存管理
|
10月前
|
存储 安全 算法
c++动态内存管理(一)
C++ 动态内存管理 在 C++ 中,动态内存管理是一个核心概念,它允许在运行时分配和释放内存。以下是 C++ 动态内存管理需要掌握的关键知识点:
209 0
|
程序员 编译器 C语言
动态内存管理(上)
动态内存管理(上)
59 0
动态内存管理(下)
动态内存管理(下)
49 0